From nobody Mon Sep 28 00:10:33 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; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass(p=none dis=none) header.from=nutanix.com ARC-Seal: i=2; a=rsa-sha256; t=1787055311; cv=pass; d=zohomail.com; s=zohoarc; b=HBZj0pW7iB5640vydfOE5qAAcKXf79PuM8McZDWH0VX1GuoOyrQaCMOeGE6bl67QMB/Wvj88m5qJX2pwCkbpq1/1//v3tfxGr3csskqJWgtPUfFCq0SefjQaiXgYDRLfJSK1MBZf85+ijnEpejTJIfyDs3E0On3ALIe7fV8yLgo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787055311; h=Content-Type: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=lpeazmiRQB4C2j9w2ZAl3zyoJrQ/XqV/Rs8qb0SYfck=; b=e1lhIUtYPA0GVX5DuajoSOrXVNZdNWKAn93AtC6WqIHrGeCDKtqO1+VOQipOdbSW0d/OwVqsTmQv/76p0zNelMebWy6IY+uisD2Hzn8ahbAKdvcVousMo+pKB4oObPM0dv35s3/MFydiUNS3wVcSwwoZN69mgR+fNHFZnPA0qxc= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787055311024440.33488861974854; Tue, 18 Aug 2026 05:15:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwIiH-0000ri-2t; Tue, 18 Aug 2026 08:14:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wwIi8-0000py-Ej for qemu-devel@nongnu.org; Tue, 18 Aug 2026 08:14:33 -0400 Received: from mx0a-002c1b01.pphosted.com ([148.163.151.68]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wwIi5-0001LC-Al for qemu-devel@nongnu.org; Tue, 18 Aug 2026 08:14:31 -0400 Received: from pps.filterd (m0127837.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67IA6Wti1191337; Tue, 18 Aug 2026 05:14:27 -0700 Received: from mw6pr02cu001.outbound.protection.outlook.com (mail-westus2azon11022091.outbound.protection.outlook.com [52.101.48.91]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 4g2m156kg7-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 18 Aug 2026 05:14:26 -0700 (PDT) Received: from BL0PR02MB3827.namprd02.prod.outlook.com (2603:10b6:207:42::26) by LV3PR02MB10210.namprd02.prod.outlook.com (2603:10b6:408:21a::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.17; Tue, 18 Aug 2026 12:14:21 +0000 Received: from BL0PR02MB3827.namprd02.prod.outlook.com ([fe80::5f5f:bb6:29f7:afd]) by BL0PR02MB3827.namprd02.prod.outlook.com ([fe80::5f5f:bb6:29f7:afd%4]) with mapi id 15.21.0339.007; Tue, 18 Aug 2026 12:14:21 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= proofpoint20171006; bh=lpeazmiRQB4C2j9w2ZAl3zyoJrQ/XqV/Rs8qb0SYf ck=; b=X9TX6ZxB9HbmpfSStyE9yG/605y20hTInr9j/qtOOecOi47C7ff2tVBOf Pd4O+4prETwq7+Keg52WP5i+emPqOkv66mAnAKxYwhauC6/MwLJ/3/GFiFzlZucB yj6igSmRlKYaHZHSgiKic6i6hoXRoS2wnjbDssiWvAHtcOXOdLXiJbD1oUKMTlEZ rGa6+LbSxjRpJEsYmgj+Nr83O/kZ/WiVUlR+Kcq5FeOvfxewcf9tVXoRqBtM4lqU M7qfIYVfPTPC+Q3l9yjwTqLZ/z/VAC90YlFk9POgjKJr0LXF3p0WC1XHztmBmsZr JjR111SjWxwE6R088mWZjIKXq2PbA== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Um8hAL4U5sx3G9O7wXqE1Td4/IhnOuEuflvxiBGV6qGPoMKh2G851OkzokuJ7CHnz0xsjHzAd36Dr3reHTmUPfwBeslN1M5Ne2IBFfy5Kbf/bhSHNTM4ZcwGhg/CmnjkyWiVDHCsBDvFXQRgsRqxQ7OWbY0HGGiknxYuKBsNp8OVPVdJtArolLwAlsbvv7o4UbxqWOSHetuMIEorq/YeaECB3HcmsVaNRHJCHRPCBh9ukbLMUsTbbTDM5EDxaX8mmN1g9fvcPOzADmdTlaiIEBtH5SVQmx2tjy0fHMcLLh5KIVzxrAm4bDRolIC4+Iw1uquZCT0ys+EhwtwEobntFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=lpeazmiRQB4C2j9w2ZAl3zyoJrQ/XqV/Rs8qb0SYfck=; b=fsTeh0lD1mG5npRnQyy/92vgFfo9YwdsQtfi6WHKA3X6WoHiegSeZ+8M6Q2PupUxapDnnXQgD5uFbakwKD0Aoafa7cttPpSt/iMDMS+eV0g6YWwr5pG95kAGsyQVXkDCwFO2pq4vnsFWuwOvhcDTvdVmqsrsDeIYasRZ5Oym/9UXUsVZpaW+aQwv6liicY/T+Y/SLQqrIGAyKpYyzxhEr4E2VY3ckRIG26qA/1l+CnEiyurQ1kLDwpTOCKUyHqU5UXnRpS/gWC8JGw17L6ZrSC8YSn4SsUZoKXgtKc9CsGzT1FJ1JTfEaR7Xj3XEKEUDkm7Hwbxp02X1GG2FMGgvlg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nutanix.com; dmarc=pass action=none header.from=nutanix.com; dkim=pass header.d=nutanix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lpeazmiRQB4C2j9w2ZAl3zyoJrQ/XqV/Rs8qb0SYfck=; b=ovlV2Oer4yxoYb7S8EWRVr0eWqtsDCs+EzemO6WKvb+r88ADTnEMgU5FrZ6+cCXXchygFtQFsjwhfq0zPaiXosTA06fhs8OLF9tVK12w/pqFrKxPBVJLaJmAoGiSwZx2PS2T5bLJeZuXyl/gzHzbyIrNx54WxrIaGKjWy/BsV6bvGptCdBWRn6OkIcLFPml256OyDLW3cHRpU7ROUBkj0nVO3FSU105rwbf2qeWH9TYPqmGOvQg3pUueKI/QabLje3K6+fPE/gs7tGhH7yjtV72owzoxeQwp/CsDgj5iyMmXrhvkTd1edlosDhE+xlIYte3gBdj4jdtUep1jzvzgdw== From: Lukasz Kornicki To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Subject: [PATCH 1/4] ui/clipboard: add clipboard peer update notification Date: Tue, 18 Aug 2026 14:14:10 +0200 Message-ID: <20260818121413.2660786-2-lucas.kornicki@nutanix.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260818121413.2660786-1-lucas.kornicki@nutanix.com> References: <20260818121413.2660786-1-lucas.kornicki@nutanix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P189CA0053.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::17) To BL0PR02MB3827.namprd02.prod.outlook.com (2603:10b6:207:42::26) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR02MB3827:EE_|LV3PR02MB10210:EE_ X-MS-Office365-Filtering-Correlation-Id: 876d6a17-1fc8-45c6-8cd4-08defd223c13 x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|366016|23010399003|6133799003|3023799007|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: FYor3neZY7AOJFYlxKYs7TURlJxwHBUlkVWCdk53l+TiQLICXtFlLAZyAftopu43LJpXlSt7FaPykicU2RwPm1adwiUhJW0FdkJqL/CjTpbUWR6s5S56Z0XWcc/Wf87kFQjGOukWgcEQve2MfZmyOwL89iCxSKCmyPxtJV/KHIFfxwIr2HgoqHCted5qpSQbvL0nuxPdpLrqcEEZuyIypURqWQz+eZ4Le+AGbIAh2oZggAGFB/XJcF1UrT+0ocqjQ0SVvxjXW1JePvG3aXUU0FK9iTRN9oFW29kH+OFljD6fJ6lpu7+x532ABL2XuY2REPHpydSakI1XzMJ3dvlfZseQp5fZUK674ui65jILKLKYsSO9kb9NfroQRlzdV3jVWQSYnvE8y0jvzobrlQUgJxYV7SoTuPjNPGfMUAswb8LR38T18E99BUrRcgmQ3zStoq7fQb9QyveL+kjM/I3dP5xqVXhsI10UkQTPDoTxKQMBwgX4/iY5U4hVWvmF/ju/Kw1ima9p74T05sojjaiz9pX7oFR26qyr/uoBWOhKimrUmz6Mw349sDPppILd90VeGEI7p+WHYC2r8hLyP6NTOlXz2f3JHfwX6kTX+UayA/+Esd+dma8sxrN09EXlO82i/7QppJWtc0+Iqg46rIc6DBtKyVCAsXgafsPxuggZHmo= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BL0PR02MB3827.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(23010399003)(6133799003)(3023799007)(56012099006)(10067099003)(22082099003)(18002099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?8fncZ+l0cMnfXtyovUGdgwzhkDbBlC3wnMSR3j9xyl7n8aRDy8DftNZuTKie?= =?us-ascii?Q?chMS02yXPtv2MP7JGjt9HoJ+DLv255JszbEbSyrogINpLVEJADaATtus9WcM?= =?us-ascii?Q?N7JcVLLVPbC62s6nOVlwkZ8FjMn5Lzsb2Jd6uAN8lTkyKe5DfaqcPIyxwGmm?= =?us-ascii?Q?siC5Bq4h97VBfRBOzvOtm+0wKIWbunR3/8YBpimgvXcnyzzd+y7OQCrRY12r?= =?us-ascii?Q?Z8ZZxwgqEm+t7wHPSScJ61vqK1tW0JLfXwlEzVkN6SSvzLMQWiVu2a/tPg7a?= =?us-ascii?Q?KihutSjf//xFII9e3chcY1FamniJ6ubuQ9qgnbTtsNMzfDIqPWDI9bDVgc3D?= =?us-ascii?Q?wwPGBU2wBCU7rxjNpP96MSNVCex5s9sN7Bd9K9FgYOibpMm0Q9swtcQ0fyBe?= =?us-ascii?Q?4dLtKtVNc+KAKJYeG+/VxzfYD7ZrLvfF5QVniHvVke5SYS8qDSVT1ya0XVAf?= =?us-ascii?Q?g1i4Kk66yLqu0ZVh8gcsSNo1rFUAUw99qcgBaWCTgfiimkv2ZFz5+CVaMuI4?= =?us-ascii?Q?d22OpiJZFF7bHsrw39MAje/ubAzX3QiTRjBPIxZBY7PsxwzKoV4wyY0quCpd?= =?us-ascii?Q?W5seZo+u7B32QDhcBoRU6/iyQYXOZW4E5w9WcR8aJKgYSWP5L2LYk52AUpQZ?= =?us-ascii?Q?l41iYBg9AIL2QH5OLLKBiTscSgn73YXu8kihkGS/dMXVClJo5G0+MIfZG+S2?= =?us-ascii?Q?uUIxhwzWZKr0zO+T0FZn/OZNE5KCRr5GEecIOS6J1Q/4yDJb+TWI1eJ5oKY1?= =?us-ascii?Q?v6Lycjph61h2LSQvWsnLdJYnWSli1zBIjdF5o4tXbpHN3pGQB3thO2qug3sn?= =?us-ascii?Q?Ucw49paIGooam9mGLKUfB7Mo9zy/rp3uf5bTlJKYbptk2dtYiF9Yv5ICOV0M?= =?us-ascii?Q?9gFNNNqk3rEe8++2+lL8Xrh4w18MbRTTCHqLBnpBqd71CAf5BgoDvSxW0d8T?= =?us-ascii?Q?5MTDCGfml0mgVg2FPz0rvYd8bX6Jd19PmmXQPc9pFF7EtwL9u/wf6/xUE8vB?= =?us-ascii?Q?Xat3h8TdNtB9bYguDqqFqr+UG1I0YKvCq14qJ8OvMZLIKUZYUG/7iQopXMit?= =?us-ascii?Q?NkZ6fz6Ja+ogbAnJBMTZu9ncR+A7CWlGK5n0wDSNrz7VhFIdsxSv8JC2V2ix?= =?us-ascii?Q?s0gOe4TeclAMZ9uUyqlzZUwFpYLKkQLIWgY7cS/4ZvvyhDy/uyEacd8elCjz?= =?us-ascii?Q?DmTSbSIftHkIDe3lF3s7M1h6cRvSKY2MEtMmsUKD6tQzvJz0qh/7ZcTXPm4R?= =?us-ascii?Q?EThCNCx9VxVT0siJdT2728Cu+3hHqneFKJ6qXVJslTsbVqwJfAezLoe6K6WQ?= =?us-ascii?Q?+l2N/jsi3ST2auuKmz6EYplfeK/oVMrvKDIbdDd7TKTanoYexBETPZu4kB0U?= =?us-ascii?Q?0zgBuL80wXrf2RkWfaI/fnG7HDlBP99w+c9dQDQtAu7W0qxx1usmlZWwyeX4?= =?us-ascii?Q?+kCOo34s6wSF9064AIsDm5u7kRUfo5dhTTlar+9duu5iJAMm/FqUxvwEmozE?= =?us-ascii?Q?ImdTc+nz83OeoGXKX3cXInwTa8U6ifUy/CjU4UA7lmT55acUjr/O8AjKKBsI?= =?us-ascii?Q?Fa183Hu62n1I00rKNNFTY9S63BrDg7MWq/mWAZuhqhLGShGqFNVHx1qfBPQ4?= =?us-ascii?Q?KDSLSNllaJJrBm2gR3I1y51ecOhYaGfMeb/AhTFEF9MOyAhzNhCOeSvDmZV3?= =?us-ascii?Q?l2eN1IS3V/afR+uPJD6MRIJqDUuNjd5AOgWwoDrSgVC3vn5pNY0bFqt3Rzmt?= =?us-ascii?Q?km8srU8Y7g=3D=3D?= X-Exchange-RoutingPolicyChecked: oPKYfPn+QFz5mJ107ne1lNmasZWAeTH8AsijlBIN5yj+7wB2yV4+72OmNiqDBS1SUF3gbeKMXXTNbn7XthfEtKIBK5dWZ0FW33Mmdg5fi6daVxcgftUxjc2dXvMpLVWXds/lSg6WHDcd11tt0WlV9zKOOC6zp8bmUeQ3r5uoSAOSjztmDpEGxV5pY5KhGuS91nlx5GPLmEYHd3wvwWNJCukXZBgL+BUQOSQXkpVOS22vE3qfoqhqBlFDiJK8w21o0jPItKsF5NIA3v1nWH0Yh3k/T9wyD6JQzjtMIydri8j/Wq9HYZQ2CM9sZKVaG46iMMvP9VbGc1AJy1HNAG8xOw== X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 876d6a17-1fc8-45c6-8cd4-08defd223c13 X-MS-Exchange-CrossTenant-AuthSource: BL0PR02MB3827.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2026 12:14:21.4360 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bb047546-786f-4de1-bd75-24e5b6f79043 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: fjCxlSInDE6QVcOAxPZpTO6tr9RxWuOAO3oUcwA07MU/sihqrAK5P+LMdTUgrgD2QnxjDSElSDObCBtH6SLKezsgQ3C6z0WHopuXdwZnZWc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR02MB10210 X-Proofpoint-ORIG-GUID: JuPbr15-xgffl7FPCV4KsWVzRq3jFMl0 X-Proofpoint-GUID: JuPbr15-xgffl7FPCV4KsWVzRq3jFMl0 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE4MDA5MCBTYWx0ZWRfX7T43XlCPzshj q/Yo4BNU25H1VsHtgghNZs7OJs03KkLbtzXipC1tpMS6F/d1YXLwbvJWKMs9rl0yzKT7IzfeV4z FHl0UANuY1kECoeZnMQLfGtZFjUjQHEXCtqWIOCc954ehzStCHpGAKx+ATdEioi32KytTSccMvp lyYY7wun/XNZhlv5W9PjNbucmyB811pW7ngg4zXsUPf2f3Hp8eN6Ng0XubSo4pTbOOyvfGzjF+p QmFparYS3qUMVBTAEEmybWcmdl2chxWGaOO3iymAi5Wc/OPu3nx7CpAXZjDuPVoIHragil4Imul 8G8tAbAULmW/m17VbLqLxwl1ynr2dS3j/ScsXhfaqD1NZbP+ct1qqh/nr7Ut1YR/IQtbX8rwp0I fCZyr8BUCCdFjziKZNO4EhHaB1F9B/cUV99zOM5l4vYL9rGCoD+IA7ZRgmbznoPWzJIwK/4+ZIz E/4FXDK3d/Ts66BgyJg== X-Authority-Analysis: v=2.4 cv=RImD2Yi+ c=1 sm=1 tr=0 ts=6a844ca2 cx=c_pps a=gqqRaR/JtIFMplGXl4YyTg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=Sv0fKeRqtYgA:10 a=1FjsvbZJLK8A:10 a=0kUYKlekyDsA:10 a=sWKEhP36mHoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=Ap8k9tRZuQ82DLYWQqG7:22 a=64Cc0HZtAAAA:8 a=F_oEj4eJVQyrcAUegb4A:9 X-Proofpoint-Spam-Info: AW1haW4tMjYwODE4MDA5MCBTYWx0ZWRfX03f98sdFXKCQ mTLkHwNIqcVxoY34XrbXF2yDWSH3n2atuCMIl/6WdzuyS4YWCL02xsLzaTDjX2OK8AUu7Es5gzZ /++HrTrWdXzml8odewn397aj7zbW350= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-18_01,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Reason: safe 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=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.151.68; envelope-from=lucas.kornicki@nutanix.com; helo=mx0a-002c1b01.pphosted.com X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.343, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, 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 @nutanix.com) X-ZM-MESSAGEID: 1787055311690158500 Content-Type: text/plain; charset="utf-8" Add a new QEMU_CLIPBOARD_PEER_UPDATE notify type which carries a payload with affected peer and whether it just registered or unregistered. All existing notifier handlers are updated to explicitly ignore the new event so that the enum switch remains exhaustive. Change-Id: I4b90f50a9b6355bbddb53d21dd6498fc01c0e095 Signed-off-by: Lukasz Kornicki --- include/ui/clipboard.h | 19 +++++++++++++++++++ tools/qemu-vnc/clipboard.c | 3 +++ ui/clipboard.c | 17 +++++++++++++++++ ui/cocoa.m | 3 +++ ui/dbus-clipboard.c | 3 +++ ui/gtk-clipboard.c | 3 +++ ui/trace-events | 1 + ui/vdagent.c | 3 +++ ui/vnc-clipboard.c | 3 +++ 9 files changed, 55 insertions(+) diff --git a/include/ui/clipboard.h b/include/ui/clipboard.h index 62a96ce9ff..6166af5139 100644 --- a/include/ui/clipboard.h +++ b/include/ui/clipboard.h @@ -25,6 +25,7 @@ typedef enum QemuClipboardNotifyType QemuClipboardNotifyT= ype; typedef enum QemuClipboardSelection QemuClipboardSelection; typedef struct QemuClipboardPeer QemuClipboardPeer; typedef struct QemuClipboardNotify QemuClipboardNotify; +typedef struct QemuClipboardPeerUpdate QemuClipboardPeerUpdate; typedef struct QemuClipboardInfo QemuClipboardInfo; typedef struct QemuClipboardContent QemuClipboardContent; =20 @@ -78,12 +79,27 @@ struct QemuClipboardPeer { * * @QEMU_CLIPBOARD_UPDATE_INFO: clipboard info update * @QEMU_CLIPBOARD_RESET_SERIAL: reset clipboard serial + * @QEMU_CLIPBOARD_PEER_UPDATE: peer registered/unregistered * * Clipboard notify type. */ enum QemuClipboardNotifyType { QEMU_CLIPBOARD_UPDATE_INFO, QEMU_CLIPBOARD_RESET_SERIAL, + QEMU_CLIPBOARD_PEER_UPDATE, +}; + +/** + * struct QemuClipboardPeerUpdate + * + * @peer: the peer affected by this event + * @registered: whether @peer registered or unregistered. + * + * Clipboard peer update event data. + */ +struct QemuClipboardPeerUpdate { + QemuClipboardPeer *peer; + bool registered; }; =20 /** @@ -91,6 +107,8 @@ enum QemuClipboardNotifyType { * * @type: the type of event. * @info: a QemuClipboardInfo event. + * @peer_update: a peer register/unregister event + * (valid for QEMU_CLIPBOARD_PEER_UPDATE). * * Clipboard notify data. */ @@ -98,6 +116,7 @@ struct QemuClipboardNotify { QemuClipboardNotifyType type; union { QemuClipboardInfo *info; + QemuClipboardPeerUpdate peer_update; }; }; =20 diff --git a/tools/qemu-vnc/clipboard.c b/tools/qemu-vnc/clipboard.c index f62b2f2949..b85a2d8b55 100644 --- a/tools/qemu-vnc/clipboard.c +++ b/tools/qemu-vnc/clipboard.c @@ -174,6 +174,9 @@ vnc_dbus_clipboard_notify(Notifier *notifier, void *dat= a) -1, NULL, NULL, NULL); } return; + case QEMU_CLIPBOARD_PEER_UPDATE: + /* ignore */ + return; } } =20 diff --git a/ui/clipboard.c b/ui/clipboard.c index e3d8a31ba9..beecb40e6f 100644 --- a/ui/clipboard.c +++ b/ui/clipboard.c @@ -59,6 +59,21 @@ static void qemu_clipboard_change_state(void *opaque, bo= ol running, RunState sta =20 } =20 +static void qemu_clipboard_notify_peer_update(QemuClipboardPeer *peer, + bool registered) +{ + QemuClipboardNotify notify =3D { + .type =3D QEMU_CLIPBOARD_PEER_UPDATE, + .peer_update =3D { + .peer =3D peer, + .registered =3D registered, + }, + }; + + trace_clipboard_peer_update(peer->name, registered); + notifier_list_notify(&clipboard_notifiers, ¬ify); +} + void qemu_clipboard_peer_register(QemuClipboardPeer *peer) { if (cb_change_state_entry =3D=3D NULL) { @@ -66,6 +81,7 @@ void qemu_clipboard_peer_register(QemuClipboardPeer *peer) } =20 notifier_list_add(&clipboard_notifiers, &peer->notifier); + qemu_clipboard_notify_peer_update(peer, true); } =20 void qemu_clipboard_peer_unregister(QemuClipboardPeer *peer) @@ -76,6 +92,7 @@ void qemu_clipboard_peer_unregister(QemuClipboardPeer *pe= er) qemu_clipboard_peer_release(peer, i); } notifier_remove(&peer->notifier); + qemu_clipboard_notify_peer_update(peer, false); } =20 bool qemu_clipboard_peer_owns(QemuClipboardPeer *peer, diff --git a/ui/cocoa.m b/ui/cocoa.m index 3751be3792..4587547c98 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -1860,6 +1860,9 @@ static void cocoa_clipboard_notify(Notifier *notifier= , void *data) case QEMU_CLIPBOARD_RESET_SERIAL: /* ignore */ return; + case QEMU_CLIPBOARD_PEER_UPDATE: + /* ignore */ + return; } } =20 diff --git a/ui/dbus-clipboard.c b/ui/dbus-clipboard.c index 90318384ee..6940f719ff 100644 --- a/ui/dbus-clipboard.c +++ b/ui/dbus-clipboard.c @@ -125,6 +125,9 @@ dbus_clipboard_notify(Notifier *notifier, void *data) case QEMU_CLIPBOARD_RESET_SERIAL: dbus_clipboard_reset_serial(dpy); return; + case QEMU_CLIPBOARD_PEER_UPDATE: + /* ignore */ + return; } } =20 diff --git a/ui/gtk-clipboard.c b/ui/gtk-clipboard.c index 476e6b8303..6bb3d7f3fc 100644 --- a/ui/gtk-clipboard.c +++ b/ui/gtk-clipboard.c @@ -133,6 +133,9 @@ static void gd_clipboard_notify(Notifier *notifier, voi= d *data) case QEMU_CLIPBOARD_RESET_SERIAL: /* ignore */ return; + case QEMU_CLIPBOARD_PEER_UPDATE: + /* ignore */ + return; } } =20 diff --git a/ui/trace-events b/ui/trace-events index 339a61f341..917d116d90 100644 --- a/ui/trace-events +++ b/ui/trace-events @@ -171,6 +171,7 @@ xkeymap_keymap(const char *name) "keymap '%s'" # clipboard.c clipboard_check_serial(int cur, int recv, bool ok) "cur:%d recv:%d %d" clipboard_reset_serial(void) "" +clipboard_peer_update(const char *name, bool registered) "peer '%s' regist= ered=3D%d" =20 # vdagent.c vdagent_fe_open(bool fe_open) "fe_open=3D%d" diff --git a/ui/vdagent.c b/ui/vdagent.c index b9784d4d9b..cc32a94fb9 100644 --- a/ui/vdagent.c +++ b/ui/vdagent.c @@ -477,6 +477,9 @@ static void vdagent_clipboard_notify(Notifier *notifier= , void *data) case QEMU_CLIPBOARD_RESET_SERIAL: vdagent_clipboard_reset_serial(vd); return; + case QEMU_CLIPBOARD_PEER_UPDATE: + /* ignore */ + return; } } =20 diff --git a/ui/vnc-clipboard.c b/ui/vnc-clipboard.c index fa05d86f42..dfe830f819 100644 --- a/ui/vnc-clipboard.c +++ b/ui/vnc-clipboard.c @@ -236,6 +236,9 @@ static void vnc_clipboard_notify(Notifier *notifier, vo= id *data) case QEMU_CLIPBOARD_RESET_SERIAL: /* ignore */ return; + case QEMU_CLIPBOARD_PEER_UPDATE: + /* ignore */ + return; } } =20 --=20 2.43.0 From nobody Mon Sep 28 00:10:33 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; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass(p=none dis=none) header.from=nutanix.com ARC-Seal: i=2; a=rsa-sha256; t=1787055331; cv=pass; d=zohomail.com; s=zohoarc; b=LCbIGmBGPJqbjHHwGSq0nXFBUvtluvVawc4MKiMIzLe46tUajRvcNt3bltACZfcCzg0mfFm0fHmAGPzzrHoEYIaX+aLckb4pqi+HJx0dD42y7CZ+YnWs8ocHRBD3ocf5OaKJfai/U39TuFHOiJq0DyyX3aDo0xj1uvLm+6eKFjg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787055331; h=Content-Type: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=rFCO2Yhy84q8PKdVQ296nxdlgf9jlSmIFYW0x+EpBvk=; b=RUiHgt3RhmRa56ylzfV99uIzh2OsYbFxhC/5hiUXcqkau244dfw/9RQcD1Rwf+FKrGyC2ueg8eHA6o2txwbL+FvXa3SzpDESdxcSh2kzp/IeMfjZKixpEo7XiCuJ+zzpqfI85rnWW7NY+1OnqL8uYdwfUWe7RW8IwWBIVzueGvE= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787055331447324.36963592516463; Tue, 18 Aug 2026 05:15:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwIiC-0000qi-3i; Tue, 18 Aug 2026 08:14:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wwIi6-0000pn-V3 for qemu-devel@nongnu.org; Tue, 18 Aug 2026 08:14:31 -0400 Received: from mx0a-002c1b01.pphosted.com ([148.163.151.68]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wwIi5-0001LF-7h for qemu-devel@nongnu.org; Tue, 18 Aug 2026 08:14:30 -0400 Received: from pps.filterd (m0127837.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67IA6Wtj1191337; Tue, 18 Aug 2026 05:14:27 -0700 Received: from mw6pr02cu001.outbound.protection.outlook.com (mail-westus2azon11022091.outbound.protection.outlook.com [52.101.48.91]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 4g2m156kg7-2 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 18 Aug 2026 05:14:27 -0700 (PDT) Received: from BL0PR02MB3827.namprd02.prod.outlook.com (2603:10b6:207:42::26) by LV3PR02MB10210.namprd02.prod.outlook.com (2603:10b6:408:21a::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.17; Tue, 18 Aug 2026 12:14:25 +0000 Received: from BL0PR02MB3827.namprd02.prod.outlook.com ([fe80::5f5f:bb6:29f7:afd]) by BL0PR02MB3827.namprd02.prod.outlook.com ([fe80::5f5f:bb6:29f7:afd%4]) with mapi id 15.21.0339.007; Tue, 18 Aug 2026 12:14:25 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= proofpoint20171006; bh=rFCO2Yhy84q8PKdVQ296nxdlgf9jlSmIFYW0x+EpB vk=; b=2lqWfFiV/quMpBb2GKtrytYqNE5bxSlEk+O1eoIkXqzvYFP7FOdiMFD4j W/hM7aCfDrNq5DQI7+LE3bx/YYfGXM8JTDD0rpc+hmbDEryT8txRtZaakQ+sONw/ c25WikMLtdoquGS+BKJqdNkZxZqg9ANtQQrR1zP7HdUv3zBnbcMz/txknziiBvJ+ qt0BocB7Al+DfLvAekZ322zo7avudexsSXbUOP4hMx+EaoHOswRhASDPjxA/A64/ 7mRPLrrM9lWONNQ87TOqs+/Nnww5L4FkAxcXLAtT8awRzhaDL/IETQymxGt0W0PF bzKpS19EiSji2/cVs9JZ5hkE+LzdQ== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dXzzvSRBUIZEEAGEEcFkZwm6KlDGsWRFWGQuUiKGLHcN+g7ff1VzpotIOk+QimMKcEC0aH1HWMQxTUjzLGtu47A+5FwKowRSV+u/qIjMqmQ9rpnvGzSNwwdDx43FPYD9sDoigFaQoge0jfTVUUmCoNCcQTNrHk+zfWQ6GgJ4QsVPqOYbY5qq1/8W+luIG/NDyjNpF7RbEABuE26ov8FCjBtvjba+UmwCyHSO+MMc77gPK768GwZnlcSIH1CI+lp7QUjYBieAG+/sv/UVVu+r9Figu7K4M7+FQ2hpyiUKAoBCTs2cbtyoGnhtXhpqOZXddYCU73ighc43H4Eb2X/fFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=rFCO2Yhy84q8PKdVQ296nxdlgf9jlSmIFYW0x+EpBvk=; b=PabEvSquanl9/FotfaVSprRrRednqolb/asRH6UbHm7qYt41kKs8lAqcOntZOY91TiN1m7A2q8fieRPGY2jbXrnyoGZ9LcXX17HRoHVxo824AlIuDs3VWd6u5lTRu71EO6VfsIT9kQco0o7dZntfB/gd9iemKhpKQq7wKjekbbVw1YVK8FCktmLdOWV3l5Z881MYLrkKQSsCIjFCDf+S2JvRSbyJ0MjNnz/U3y0CKmHgBQII1n17uuipZUEuzWIXeCfUQixWQ0OsYVfsBgFCy2HUL9lPYJRbL5kOh6BaMX9FZe8xSQ0k7VinEGxwR8RGSH8z+L4iURaxVL8MArk04A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nutanix.com; dmarc=pass action=none header.from=nutanix.com; dkim=pass header.d=nutanix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rFCO2Yhy84q8PKdVQ296nxdlgf9jlSmIFYW0x+EpBvk=; b=X8utnHPJIr7gSviaOC6qojmuGU+94lYPoQjvzfIoXlo6z/kKBeAG33UZGmYxfCrRTJEFrBHgPYt3Wq9WeeVrIB+JeHQZXKQCkf4CRT2gANaWItUkXa6+C6vmSka27FXlolhx3mHq9vziEhZAqrlr5TOX+lZXPimidD6VpzsIYRXtmwP6EqQxPP2F15gLvnwulbIIC2/7ettcS5309fOWGF9VxxhoIbu1pUcobwpLpIx/z90611ft73TupKNcm1qLDLJ4OtkH/OG8kYr//ucCiSYyCvlZ3P7YzNjlkwhgZ5zh2PqLtmrbL5BcPvfBSbDqnf6pg5wcNs7HMJiVCvxlbg== From: Lukasz Kornicki To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Subject: [PATCH 2/4] ui/clipboard: keep track of clipboard peer side Date: Tue, 18 Aug 2026 14:14:11 +0200 Message-ID: <20260818121413.2660786-3-lucas.kornicki@nutanix.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260818121413.2660786-1-lucas.kornicki@nutanix.com> References: <20260818121413.2660786-1-lucas.kornicki@nutanix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P189CA0039.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:5dd::16) To BL0PR02MB3827.namprd02.prod.outlook.com (2603:10b6:207:42::26) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR02MB3827:EE_|LV3PR02MB10210:EE_ X-MS-Office365-Filtering-Correlation-Id: 173530e0-3c27-4530-39a3-08defd223e60 x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|366016|23010399003|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: IZZBtZnWAeasjwAYf3c9htDDPLljOxI5jLtr4JN1SKcUanASqH9NkbsvAHAWaRsaF9xrWlMKiBMLIaVvAh1JfGVfxwH6Vkh5L2+iWXzflwq2KgMzFqxyCVwGcVl5fZafWGJUTGmzUqEDPrm+n6og67sEddSlC2Vzi/zoeH+2EWVfvw7CYiNV1yi93nvuO4gveE9z+2kEriFRFjBEmQ0UClFN8cQ2mXlZEPyXKs176eV2kYewOxo/rVBioUBubqB5FWrlO9T1kY3loPbNN3tS/Kg/G8fKkCWfMt6Sc0572XcOhTXIs3OxCdgRyljzXtTsa8T/YSMjNyhCCYGmot9bCs9BDxqU9Ii7Ai22SHTbcPAqUhx2FaFKjsrhBRwoMlQgcDKt2vuSd1mh4swo8GofPtPG2b1vSWuAKMW0mzJtb8VoSbQZe12gxR3x3xuMMmksCg0pTwGYu8IcSJ0xeGqo4YXdyk3PRGwMtNXngXA12R5ss1JPgk8xTO4Fix7EYNcADfGiI9n6XQ96o7QIQ4UhlgOuZTAwDoa+Nj09PE+ZMRNR/0dpF0nqcpsX4uaGvYTNvM/rAZjht6S7zsEJaQ2OgXTB8mTucXPkUlbwK266ySjJw/aWH0KN5UiwJfjx9qeviNu6S0Q+H8OSj3oqCBlEOOd1NgLzDTNoN2D/BumTXbY= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BL0PR02MB3827.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(23010399003)(56012099006)(10067099003)(22082099003)(18002099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?QrZmwpL8R6V7qqvyRv6zhkZ0w/0D2kbsQEE+7c7PabLNh4S5rEO+P+2LLHKf?= =?us-ascii?Q?FlhPZGvSZQXcpYXGaPneodiRrA8RuwyVByy96ZXogYcklkCKJgdjeHajfDZz?= =?us-ascii?Q?jcfxOOX51XZ6C+xYixwL3fgSNI5Zv4lq+VFVBNktEEf8Lw2E0SDDYczxnDso?= =?us-ascii?Q?yc8ZfqnFJP54M0bmIFPiOqxhMQeoiGuo1KNYqZIUjyCuUjCKUBwav3o+S9Ao?= =?us-ascii?Q?3DGg6flrvqocwtqqN8/j70a8CCiZP7biTSRlXRWGNRGSghK6+7vZNRvspolo?= =?us-ascii?Q?X6Vhvq67KErhAdBB8h7DK5q9sWke/jANuymLWAoLHvZjImyOx6Pi4t4gbFwo?= =?us-ascii?Q?rsWLagpIIETksjBMnYxOJ2MILPIb3smwkDdsoq6eD7VIrVgjLL86LbawDJfw?= =?us-ascii?Q?nElrFSCHl52/RShP++91g3s1G7GB5wOI3tyqKxeQ281L/66/1Ah0HquWFW8n?= =?us-ascii?Q?9JZxiFCzmV5MIW3Hr3ykhYT3+YU8u8NMLoxiYveGRo7AtbbqpxdyW7jixFBv?= =?us-ascii?Q?UIs1jBqAROtMglUSQvTJ1hVl5oN9opjtyF2ZW1ZuED8cZkBQmNjMs/l+s6d1?= =?us-ascii?Q?G8HRHoAFwXpOC6tlnNjzt6ZeQ2j+CiOfTcHUshMyz6M9mOYB4nvgq95vzcQi?= =?us-ascii?Q?P/ZQt7mQi0SqG5TOkqnzJ7o4CLBnMS/+Clti77ClD2R16PKT2CbVfphSFQZs?= =?us-ascii?Q?AgLyhxRbYZdBIRTiMotUmhPdO3v2qxe7ZUjaUG28Sf1K+HkvNUIVO+lJ1wEJ?= =?us-ascii?Q?zfs5E8ioxGRQYOlP2oDmfvmgDv9afYixb0ruB2EheJ/iFRzeacDRZE8EgqS0?= =?us-ascii?Q?JKUjLrAlP0bUQN/J4eKMfci7qZLJfGF1NjesjZvSSZ4Gc9KUt4P7LoLxRJhp?= =?us-ascii?Q?kC9ZEXDVqk74TK6mCYNcZ15D3LZEhYN0xOGLQ1nUN3irtzf0nwXI1Y+QMBLh?= =?us-ascii?Q?7mmqlgHUe6WUWDY28nKDVEmTddyATb7H2UHD/k1QOovYeA29ibyuydqIlN8g?= =?us-ascii?Q?uJMVwve7G4NQsX/qSiHk8oyaehjrnxaC9j2Zvdm7/zKA9JBKlo8iOTJnB0mI?= =?us-ascii?Q?UAUmEVGiGLhYkrN3BCbHFdzZNk9tkkqyVp4Bz+/SoEfLhAWj2ObAIzgh6MnG?= =?us-ascii?Q?ihVMTajiKBk9G4b8SXifEsrKMpXDVNqIif1LR02a+m7wKu5mGkPaLlcS0Jnn?= =?us-ascii?Q?5FR/EODQwz+fAn6siKiCuUdhFnviHSdZKtYwIZgaKiUlUpe6CgT0z1U66bxk?= =?us-ascii?Q?fuOG/ZLIpZUlkEsScXy0UHBPbbF4RBm4tTFQgyaxc0tkSOIC/T2LLJkX9NCu?= =?us-ascii?Q?/j0QNwYAZzQQaPX7+w1u2fACLG9FSQsBqeC+TkuhsVUKs3QMMQ+ALUfEHSm+?= =?us-ascii?Q?UuOsX6t7Xwpj9cC7oI1J/PmgKZZp8gY0QQ34TqGyqgzS0MKXyOksDm2DhM9k?= =?us-ascii?Q?IjDuSE1Hwj/TPAaZ8D0G3ibBXIx4afRZo+DhTeNz+HzfWEnphyzCpfK15RgZ?= =?us-ascii?Q?UsnVf6irxproUhpvNmbFMTFfzDVN76skdtqtsRyOJlkDBWcVddWtK1zcYReW?= =?us-ascii?Q?1oWQGm+TAn4H9qmowO9GUhDIeJDqFLT/3TbJ7lQw3DuNkxdwFAUwHS+zdJcz?= =?us-ascii?Q?wQWPhnLOLEtVbGZ9dP4D9WkUpflJ1vJLjZs5T9plgedmbDL9RpY4xZmPVN8H?= =?us-ascii?Q?0zkT6IK8K531+hro9WwQKy0dFk3QKraBwMcGN7vUSMCq8FgHYR0y1aHy7rIO?= =?us-ascii?Q?mwQZqqjaeQ=3D=3D?= X-Exchange-RoutingPolicyChecked: mExEIP/CUxLmQDI61HCLHWhgQFPKz18+AkM/UndONQ9oZy2vwk+THZE2dZQLQnpZy7hkgq3ZnN+9n1aOxxgYHfjiOo+aPMM4BO+WNHuZgBhC4wlBmzqF56apLTAuKAjdvq8GZMYcUDbyfNhZbNlLrlKMtBTeCpDJ6WDEBMPUzIdefKm2zAmVRb0V5aPwhVDE0xMVWJr9aHeY256nXsYRAXIE7Z08qfeBOWUctuconAMn+70oip1nShIFAGKpG11fyUUx9nzUjdolZzt0sSx5LRW9aaqPunQIwVwvDxsqL3td0uQY7NMGhRQ5duY4EHHiXLqDLFzhU7ymjhRK2n3V/Q== X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 173530e0-3c27-4530-39a3-08defd223e60 X-MS-Exchange-CrossTenant-AuthSource: BL0PR02MB3827.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2026 12:14:25.2040 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bb047546-786f-4de1-bd75-24e5b6f79043 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: l+97HX5iJEUnDwdjiHcPT7NxUrO3v9rfU7oU/azPuiEYwL/qYDi88p3952+lQVWxx027yZB/xSVeyo1icRNPYA/dT4CMJ58L/cv9ZYNxJ7w= X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR02MB10210 X-Proofpoint-ORIG-GUID: eqbPn-cw4Enzt6lBWAPSjYOl571HMNXv X-Proofpoint-GUID: eqbPn-cw4Enzt6lBWAPSjYOl571HMNXv X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE4MDA5MCBTYWx0ZWRfX0YWBxIR97RWE XjgXaBrm6TkT2bXiO8aJt7TO1xPKQ6vQun8UoR7nADlrC0dIyfYbK6+WF13DLZpOV+6IA945Dtq y2mHUhb/LQnozzs++fS5XHwiT4++xLZfa/Q+/w3F7WyJd4ADK2zc7Ltaq/ajzfbY8Yy8oQC4vD2 fA8yXeU5ZBzaUfEQDWTxCYVAPrvxNsoCNPwlOXY0gOpqsn7MEwOBYKw/+KfYMwxaneOnd5XZArQ FUYAuCUU816KAavgIW3/mFeX0ACeOQQKM0bsfL8vmdciBf77QnkIssVnIuxr4u0Re65nVDRHmcS xSMrsfVnfRt5zPoIJVGBazpW4k+kSPbU1DZ6NyTXI4IrIBj3A8+tqVCEwACIq9Q+mMFXr8Kw0js ++2iHTE4RZ7BcvJ/YNUHPezhPMC12pbFnNpHS9cqylEUA3Uar3Di6irMYIKEQeXrbCqJJNSljIG MquGXd8NLiAecm/wWwQ== X-Authority-Analysis: v=2.4 cv=RImD2Yi+ c=1 sm=1 tr=0 ts=6a844ca3 cx=c_pps a=gqqRaR/JtIFMplGXl4YyTg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=Sv0fKeRqtYgA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=Ap8k9tRZuQ82DLYWQqG7:22 a=64Cc0HZtAAAA:8 a=TOO3SWKWT5g-K1EAlYwA:9 X-Proofpoint-Spam-Info: AW1haW4tMjYwODE4MDA5MCBTYWx0ZWRfX/vpLru6Ei6zp h3xkD+NLBT6ljelVtwuHBQ2PBGdpeME/X/hWtOw49WizyM+x37r7c/aJ1GGQNU885T3u8IZ4JYr kspZr6OLXkykLkHg2At73g6k8ht+Xsw= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-18_01,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Reason: safe 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=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.151.68; envelope-from=lucas.kornicki@nutanix.com; helo=mx0a-002c1b01.pphosted.com X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.343, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, 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 @nutanix.com) X-ZM-MESSAGEID: 1787055333715158500 Content-Type: text/plain; charset="utf-8" Add a "guest" flag to QemuClipboardPeer and set it on vdagent peer. Use the flag to keep track of number of registered guest peers and allow to query for their presence with qemu_clipboard_guest_peer_present(). This change makes it possible for a clipboard peer to determine if any guest side peers are present so they can tell whether a guest is actually able to participate in clipboard exchange. Change-Id: I6f39b846fb560ea52f19e14cbee34267ba404453 Signed-off-by: Lukasz Kornicki --- include/ui/clipboard.h | 8 ++++++++ ui/clipboard.c | 16 ++++++++++++++++ ui/vdagent.c | 1 + 3 files changed, 25 insertions(+) diff --git a/include/ui/clipboard.h b/include/ui/clipboard.h index 6166af5139..df7fa5e491 100644 --- a/include/ui/clipboard.h +++ b/include/ui/clipboard.h @@ -69,6 +69,7 @@ enum QemuClipboardSelection { */ struct QemuClipboardPeer { const char *name; + bool guest; Notifier notifier; void (*request)(QemuClipboardInfo *info, QemuClipboardType type); @@ -179,6 +180,13 @@ void qemu_clipboard_peer_register(QemuClipboardPeer *p= eer); */ void qemu_clipboard_peer_unregister(QemuClipboardPeer *peer); =20 +/** + * qemu_clipboard_guest_peer_present + * + * Return TRUE if a guest side clipboard peer is currently registered. + */ +bool qemu_clipboard_guest_peer_present(void); + /** * qemu_clipboard_peer_owns * diff --git a/ui/clipboard.c b/ui/clipboard.c index beecb40e6f..928aa435e0 100644 --- a/ui/clipboard.c +++ b/ui/clipboard.c @@ -12,6 +12,8 @@ static VMChangeStateEntry *cb_change_state_entry =3D NULL; =20 static bool cb_reset_serial_on_resume =3D false; =20 +static int guest_peer_count; + static const VMStateDescription vmstate_cbcontent =3D { .name =3D "clipboard/content", .version_id =3D 0, @@ -80,6 +82,10 @@ void qemu_clipboard_peer_register(QemuClipboardPeer *pee= r) cb_change_state_entry =3D qemu_add_vm_change_state_handler(qemu_cl= ipboard_change_state, NULL); } =20 + if (peer->guest) { + guest_peer_count++; + } + notifier_list_add(&clipboard_notifiers, &peer->notifier); qemu_clipboard_notify_peer_update(peer, true); } @@ -92,9 +98,19 @@ void qemu_clipboard_peer_unregister(QemuClipboardPeer *p= eer) qemu_clipboard_peer_release(peer, i); } notifier_remove(&peer->notifier); + + if (peer->guest) { + guest_peer_count--; + } + qemu_clipboard_notify_peer_update(peer, false); } =20 +bool qemu_clipboard_guest_peer_present(void) +{ + return guest_peer_count > 0; +} + bool qemu_clipboard_peer_owns(QemuClipboardPeer *peer, QemuClipboardSelection selection) { diff --git a/ui/vdagent.c b/ui/vdagent.c index cc32a94fb9..cdd4cedad2 100644 --- a/ui/vdagent.c +++ b/ui/vdagent.c @@ -695,6 +695,7 @@ static void vdagent_clipboard_peer_register(VDAgentChar= dev *vd) } =20 vd->cbpeer.name =3D "vdagent"; + vd->cbpeer.guest =3D true; vd->cbpeer.notifier.notify =3D vdagent_clipboard_notify; vd->cbpeer.request =3D vdagent_clipboard_request; qemu_clipboard_peer_register(&vd->cbpeer); --=20 2.43.0 From nobody Mon Sep 28 00:10:33 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; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass(p=none dis=none) header.from=nutanix.com ARC-Seal: i=2; a=rsa-sha256; t=1787055308; cv=pass; d=zohomail.com; s=zohoarc; b=YGJLsfELkRORJAvqO8BSjpvgU0ZYitB/7zjv6aEuuZYugCjVBk47Iq6UuK70V3dlUR805kxYAJcO3zsX6OU17c3uVAkSyqKkdrzfOMke5sqSREQ+pCFDR589yLLgTOlYoY2pvtP2v+mfXfgehX0xxq73CofyC07ltv6WA5CAqIo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787055308; h=Content-Type: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=xGnTM0V/+Q1NnttD+0lxnjqm+TYfudZ7MSrTytNC7cc=; b=KhyxViNZfsrenX8YWapn3a2GHoVZwMpBjM12xKt65tCucwY5HF8aVc+hXZOSVC91bDxlmI9rhGyrLwjIHmcpc/9MIfyP4bQk4fFaMiGJAgMzlEQbSy7fPuzAy34w//rmgo4MfvmG/IlswUWL6hB6A7JuOun5Spre1z0bWMAHoBw= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787055308227465.24831454141395; Tue, 18 Aug 2026 05:15:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwIiD-0000r1-TH; Tue, 18 Aug 2026 08:14:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wwIi8-0000q0-Or for qemu-devel@nongnu.org; Tue, 18 Aug 2026 08:14:33 -0400 Received: from mx0b-002c1b01.pphosted.com ([148.163.155.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wwIi7-0001LZ-9K for qemu-devel@nongnu.org; Tue, 18 Aug 2026 08:14:32 -0400 Received: from pps.filterd (m0127841.ppops.net [127.0.0.1]) by mx0b-002c1b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67IA60uj1136424; Tue, 18 Aug 2026 05:14:30 -0700 Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11020131.outbound.protection.outlook.com [52.101.56.131]) by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 4g2nn3xg6m-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 18 Aug 2026 05:14:30 -0700 (PDT) Received: from BL0PR02MB3827.namprd02.prod.outlook.com (2603:10b6:207:42::26) by LV3PR02MB10210.namprd02.prod.outlook.com (2603:10b6:408:21a::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.17; Tue, 18 Aug 2026 12:14:28 +0000 Received: from BL0PR02MB3827.namprd02.prod.outlook.com ([fe80::5f5f:bb6:29f7:afd]) by BL0PR02MB3827.namprd02.prod.outlook.com ([fe80::5f5f:bb6:29f7:afd%4]) with mapi id 15.21.0339.007; Tue, 18 Aug 2026 12:14:28 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= proofpoint20171006; bh=xGnTM0V/+Q1NnttD+0lxnjqm+TYfudZ7MSrTytNC7 cc=; b=ANz7yghmYn+vJwTpyyQPk8rQP1nhI/vANyLQ1bbm/R0ZYLYpr8apelaVB +gjHtOiMnyltzP7wtXFH0mh4VqT8X7HFpDoaCohvOOv/qHhuMomIBzAaqS0vHlMC FJWHncZShEBXwMy1TZSMeOkCq31H4pJeEebqFW5gdEX+GkOfcacwjyLm7APo0owL chYRSd0ZUTTwlQEW7iLvcoG6pHuo09qXGuIx5duI/Ri6eMLKMltu0wUT2oD06aCo 9Ay8oLHSmkMom6N7gBlVSpqFplYXyOqFoOBE7bcu+/IS6TU4VnOz7G6LpZEqwVbj lilJViCF3a04hwGFFCpGWHyQzthVw== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CEAjE84FZO+P/m19UULPns+j4s43/9iJC+Z21XH0XLV1eAM6mZu3b/25KD3CbXHtwf6ask7WpYTv0om+Zdu+WwCEjmBvfa/XyJxpiSgUHn/oIHIQSEUrrb6SYVKeNOaCldeW0CMc8yXh0pum/Q3pzMfNmRBOouxoPlVciqQHozUUvlcoEsz9qGsMUBum6HgqgcEGJY4VvJTjGwE61fJxpy7uU2kkMR40KdOQKhvsM4fNRoy5y/V4TyflQY214GrFrthNpeCy0HNpfw4C6NdCL0cwye7RMf1mlWISEVsc4j4a3ognkGHnI3+QfH8KN6SnF55EnUHYjq2gA/cZEXPx5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=xGnTM0V/+Q1NnttD+0lxnjqm+TYfudZ7MSrTytNC7cc=; b=bY5YBQTDT3xWUuQCDw1sYuufEl1nz68JBKMxfOfqAZSuk9O7JaZEZQ6L2WGlThNhhvB1A5tHMKSqkhCJNx52Ku9jFYvndNgkKjmaXLS+Iz/gYflHDcWj8PiM74WTBfahUdfxser/aeHQPbZSOSktJ0esygAQiFl+SGrKTdq5ibH4OUtL764Mh5DQN0oIjWyovsEAgHYgBwik6LT8FRjgl7/dYOEQZ3HsllYokgz8b7nFnvxzvryvxTKoQqchoo7RYvadhr+EY5iYadIPN0wXw1fgI7oz0kjF7xBc5LMre6N7VHXG+9XJeG60qmjHzC2jaLAnZpezH5Bx848L2BZqFQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nutanix.com; dmarc=pass action=none header.from=nutanix.com; dkim=pass header.d=nutanix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xGnTM0V/+Q1NnttD+0lxnjqm+TYfudZ7MSrTytNC7cc=; b=kfDX/s5FSgUMfd3nj3U7e8dXpxIuLPfKvSX/jdkWIVkhECzLSXpYSSnYKKyfPDGT6cp/InE3NUYCvc7SDylQFbrT9PznH4Qi+IFAcxwBocPPHwG+AAX8u3N/XVfmFsV2BIbxRUn9GK8nGSggQKRORmkMdgkdl9TATALdtCxW44ySM9QA+3324FgwK7dBHEhn75X/PUqtX+9wOWC654awSz3sUQWald1ZFuSPsiONaehnz1VbzsAgCRR/iyTiEzuMQyu1G2dUkQdlmzg7mArQKVDS1+G+9Krx4kCPNXYjKp9nWeVMqST6uTQcXwy9Rcj54WKvYgemwmKPThXQzBE8Xw== From: Lukasz Kornicki To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Subject: [PATCH 3/4] ui/vnc-clipboard: factor out clipboard peer registration Date: Tue, 18 Aug 2026 14:14:12 +0200 Message-ID: <20260818121413.2660786-4-lucas.kornicki@nutanix.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260818121413.2660786-1-lucas.kornicki@nutanix.com> References: <20260818121413.2660786-1-lucas.kornicki@nutanix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P190CA0035.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:5d1::11) To BL0PR02MB3827.namprd02.prod.outlook.com (2603:10b6:207:42::26) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR02MB3827:EE_|LV3PR02MB10210:EE_ X-MS-Office365-Filtering-Correlation-Id: 14d22bd2-d64f-42ae-80e8-08defd224085 x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|366016|23010399003|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: kcp4hBBOL1zEN/Wy0WjTa4b1O5Eglzqz6U1q1coHKQ1RDHRJMEqzhyhqURp/CZX/Fwb8pS8W0ituX6TI2RKixoVfE6PIpni/z5M7OGWtyHAN1Sop3hZ9Ya9UpmuV5gMhqrOI794/0fUP9ox7SCBeTPo0L7/fZwB9ncM4Rdknc7ZMm4/bnhRMyzxRyo7Anjc32yyR1sdfCZtQVsYEkbYfjNO39fw/QRWhGX3xsivf5D7+n4gSRTpInbS9rjWPWwVx6vZHq7+Ksc7onEgHVhffNa53gAVDz81H8adwFGDRvA83/BM4TfwLO6FcH4Nefg1B0PoIEZxMGg1vxbpx7M8giAfogO6g9mzRokLsJ8GuFaTjcYQrsS0nbExJIm42fRWcaBr7LsR3kcRPuMio0m0YXfEK+Z2SW0hzhC1/Di3PrdopWjE4vFcgxuodAiw8ZIfeLe8GMwsoomB/AbwuXqXtwJVUHnUV0Xx/NmUUgnv6HHhLiPopd1zfoastA+TlXV4DyZDqg0J5YcNCw1su2T0r3Xv6mMRNNJ5nh1eR5AV8H3u1atjVGtjg9DY8mVFFwFh4Trn9TsiDukolQeQg2P1OKXupMaiemPzeyCklGT8KVdJZXqlUipVuPZFJEsURcLpS8pHacmk3RsTrnv8w9tM/tVrjl2o/tuOOPIGyojOnxJI= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BL0PR02MB3827.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(23010399003)(56012099006)(10067099003)(22082099003)(18002099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?r5LsUscYtim4CI3Z7VHVHECZZ6ue1mpAnR/ZY9kg5TqEZNhqvcjhWHpGckNh?= =?us-ascii?Q?/UY30QuzLjG+1VDBFIAb3eq+kwMQjhbrYwCCp8MIxL9rXVZV6WJX00rkeAae?= =?us-ascii?Q?Ew/PXAkDTsDnfJF+5ntPotMsI1ECT0KGsmTRp3SzjwnOs0exEo031Wfuzwb7?= =?us-ascii?Q?OzuA3Vcn2ijfaQCcTTlg/FGLgSPki7bvnyMGCDSF6zzG8MiTAjZtttHRPE10?= =?us-ascii?Q?xB0WQJ2oGkf39RBCXDQh8+WreUnQG7f13u0bsQKcL0wdsIipjgcEm5b0HT6Y?= =?us-ascii?Q?aqda1TFz+6m6gGdh1+P1P4BA39lnJV6v2u1cZv6DPtkIqX7bWH7vWJspxXHs?= =?us-ascii?Q?z3Z/xoReQkFJG1wQOxQELHZFdo5c91/bzrg8PItqdSfcvkQFNzF0u7cRYic9?= =?us-ascii?Q?atircAYH5JiiHr+VKnm1pVSnm6Jjz3GkA+7EXuLmhcnBlQ3Mss0SZOnyBs2R?= =?us-ascii?Q?MPSKJHivXqFvtCF1aM5BMmscB1Eo5rKUTDPoLdJUntSIXcSnYLa7Y2mgflLo?= =?us-ascii?Q?aKzepJzHMXE2wdCa9UkG11aJ/W0aN2GW0uvVPLjFNvDKiUTlXlIcZTyYPloO?= =?us-ascii?Q?MMX5uPh3Eo0GaBWG9J42+EHlHomNU5sJlQ0P1igmgJW5KgrfYmmbzLKB5mlC?= =?us-ascii?Q?PKJ9DEwiJhgyv0RUiFXI5u4Vf62siMps+CvstexImYOuHFeKjcLri5xme5OF?= =?us-ascii?Q?HXvg3skZ2A2yzx46lkz1f97zYyBV+Gdd6CgEC0ljwRgjkUCXPK/KnQ2Tgw/2?= =?us-ascii?Q?YV7Mcrka1tS+7sC0GnoGwpLEuHIkyQSjYBfbkHi9UIrSYx/S5k3QefZsDR1J?= =?us-ascii?Q?DOmf7fAAWiXrCa36gAqFA7k3EeG0Nl5/A7Ltq7y7jswf6l3h+51XCkoa2OVn?= =?us-ascii?Q?cUuUjQeub0haKvtWpgE35Toj7b6WW8qsdm8WN0bVe4uNqAcjp/DNVdCoC7uQ?= =?us-ascii?Q?gG4yT2+R1krNbszaeflLJkNdu2gWb1rzG8ytT65yrg1jEBdt2MWUTFJ2hjtC?= =?us-ascii?Q?ArzVegESBx3I1RSVJw5znei5LPQgClzafrgCEMg+eHlrEq7NfZKRjZrsvOyI?= =?us-ascii?Q?fX5fmIF1cdXQskRy54BtsaN6zzcBzO/u9oy1qQ5HmENF+CRJuzcoIQ++vO6r?= =?us-ascii?Q?Ss/Zr4Pre5F6b0SaxT8R4IEvWPxMXjYSjRhcQy0KI0abjRkhkCwr74NrtAZt?= =?us-ascii?Q?gZQssqghr4X7W+A9n/WvCoepsz4oa/1Vxt8ci2+YbFTKX8rnaF84gOrjj56K?= =?us-ascii?Q?46hNTgDJQ/hi9ffFEBVfC0rpcw9yZAJ56lyeFqFEbURC4SGby1zZsAGoqZgv?= =?us-ascii?Q?f5i8gGX3yFUySW1KvnLm1OSK40eM6kltGAXsUMSkDNNjYQvazBzKS3a1yNxy?= =?us-ascii?Q?UlXCJQaAGzmpZOeowZ0T8h4KjKuXFYV8tvvo3A+jkI2GCZJwecvBcyS1hOGN?= =?us-ascii?Q?muwLo/UGsvwaw01ym+eY2XDewJHOBPeN5Vns0Vq8ZLSdKurOOZGK+ws7WmVv?= =?us-ascii?Q?7WMu/QVrXl8b02F/zPfxAClpFwUTB+mB4la52mDP7KVfl/Wiixke8z2Nt+0C?= =?us-ascii?Q?r79p3/bb7hCI3hkNxObqlHtb2TfHsQl/h157y4rEQHqW2429XAQh05DYIH7t?= =?us-ascii?Q?6z89JmGChkuLoU/ZXvXC6MladT35EgNGHK0w3MdGzs9ZrTdVRpOyKXPM3fvn?= =?us-ascii?Q?+Tpx4BvUkVzq4RtjWizzEmaLtZD8j4/tu1ztIFVwchG2FZtQEBjtcgIsWedL?= =?us-ascii?Q?NEzkvtZHfw=3D=3D?= X-Exchange-RoutingPolicyChecked: sjXTVmaWBIvPS9VJBliQZSV78gOlaCBKJk24V5GJvh7nWoH5t7BT/IsasngNl0lDBXLkK8HHMTvsaDfOTB67pHg0TC06uj3Vyu4zXH4mxplQhH4MufgOg9xcPSEW8W1pzfMengBpyvRLnVoe8r0LzC4rxNmGM9NeX7QN7lm7XB/YQ/fpZM0u7sMNz0GUjjggskRDfoYDb7PFJuKErkjIFSBjV5O6VnEW6IsuVPdza1cAjbbw3ASRaXGmnOa1D+iwNOLqj+5GhFHqhURm0Q4duv4QaJh6WklPFME81cQEKMxpXfWiSmYJ8x9hBf+GCDISnf2y1J1cOczwVu0aUq2vNQ== X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 14d22bd2-d64f-42ae-80e8-08defd224085 X-MS-Exchange-CrossTenant-AuthSource: BL0PR02MB3827.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2026 12:14:28.7124 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bb047546-786f-4de1-bd75-24e5b6f79043 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: oEwm6f/NsBIaYIVfoX0tI01+3ic7aQzuDFYfc1PUb7YBObQhVuF78zjnqs3FmfMe93c8vlD8UNx+s5S/BCf7Ebrqbp+J69A8o3xXCre0Eio= X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR02MB10210 X-Authority-Analysis: v=2.4 cv=DZMnbPtW c=1 sm=1 tr=0 ts=6a844ca6 cx=c_pps a=xmbubLo1gGd65bmaoQID5g==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=Sv0fKeRqtYgA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=jxMXjlTPpCISP5mWtjnE:22 a=64Cc0HZtAAAA:8 a=z-CVK44dz1E3zK-qHnUA:9 X-Proofpoint-ORIG-GUID: E0_vtxopceSuJMxwargjfbQ0oS5k6844 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE4MDA5MCBTYWx0ZWRfX7NHQ/eTTbQo0 4WlCVxHmoIY/Xv+6FOJD3Zz1A9RLjKaeHOICDZhYwyK5riJyVF5DXxudH8fXTaMcXCCUpbJEh6B vibyBP2TFVO1dbskufBEAbMKPsi10nwmJQkzLUwEHfzGoo207vITLHTrNiPQMPm6Y0cM0hm/t6X C7+Q31J9WCrXs42Xci8RkNUPMu1aLzEZkRfX+K5jEyIZ3NpHbvv0wGiyoashDpSmOxgSojgtPct EIHoFfLE7NN84fV+NJ2wLJ73uq9ZbZpP7mC6gVjuIK3D/VNSlhCbh37TKLnGruQddto/KkhS2a9 Ek0YfALMvNEcwVdq3TPJcKkC29RFCxwp48c8OKfVAMcBGIMZgJ2P7/cJmx/Qih/nZJifZECl4WH 1W8c90UzdK3H5jbFd92r4MpM0XciHR7JblfOuVh0gNJJLu0HY1lGgJuKl8FCGIsV8pfOUsF3Whr x8Bqw0EwxundPO4LrMQ== X-Proofpoint-GUID: E0_vtxopceSuJMxwargjfbQ0oS5k6844 X-Proofpoint-Spam-Info: AW1haW4tMjYwODE4MDA5MCBTYWx0ZWRfX4PQn5VBNzRn4 W/UETNnhKkYHJSBsN2RUl6DsTjoKeKIJfB9ucI7SCExn3GbINLH1fRwH9BuIfZ8riigA7MD7IX3 U+mNQTkPfrWqKFEMydZYZD6iCkrM/hQ= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-18_01,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Reason: safe 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=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.155.12; envelope-from=lucas.kornicki@nutanix.com; helo=mx0b-002c1b01.pphosted.com X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.343, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, 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 @nutanix.com) X-ZM-MESSAGEID: 1787055309880158500 Content-Type: text/plain; charset="utf-8" VNC clipboard peer is registered inline from vnc_server_cut_text_caps. Move the registration logic into a function so a subsequent change can register the peer independently of extended clipboard capability. No functional change. Change-Id: I96b20e914b3a0e496791a24b33db8a795c2c1690 Signed-off-by: Lukasz Kornicki --- ui/vnc-clipboard.c | 17 +++++++++++------ ui/vnc.h | 1 + 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/ui/vnc-clipboard.c b/ui/vnc-clipboard.c index dfe830f819..67f710f6ed 100644 --- a/ui/vnc-clipboard.c +++ b/ui/vnc-clipboard.c @@ -325,6 +325,16 @@ void vnc_client_cut_text(VncState *vs, size_t len, uin= t8_t *text) qemu_clipboard_info_unref(info); } =20 +void vnc_clipboard_peer_register(VncState *vs) +{ + if (!vs->cbpeer.notifier.notify) { + vs->cbpeer.name =3D "vnc"; + vs->cbpeer.notifier.notify =3D vnc_clipboard_notify; + vs->cbpeer.request =3D vnc_clipboard_request; + qemu_clipboard_peer_register(&vs->cbpeer); + } +} + void vnc_server_cut_text_caps(VncState *vs) { uint32_t caps[2]; @@ -341,10 +351,5 @@ void vnc_server_cut_text_caps(VncState *vs) caps[1] =3D 0; vnc_clipboard_send(vs, 2, caps); =20 - if (!vs->cbpeer.notifier.notify) { - vs->cbpeer.name =3D "vnc"; - vs->cbpeer.notifier.notify =3D vnc_clipboard_notify; - vs->cbpeer.request =3D vnc_clipboard_request; - qemu_clipboard_peer_register(&vs->cbpeer); - } + vnc_clipboard_peer_register(vs); } diff --git a/ui/vnc.h b/ui/vnc.h index 88293ef497..d8b0070396 100644 --- a/ui/vnc.h +++ b/ui/vnc.h @@ -636,6 +636,7 @@ int vnc_zywrle_send_framebuffer_update(VncState *vs, Vn= cWorker *worker, void vnc_zrle_clear(VncWorker *worker); =20 /* vnc-clipboard.c */ +void vnc_clipboard_peer_register(VncState *vs); void vnc_server_cut_text_caps(VncState *vs); void vnc_client_cut_text(VncState *vs, size_t len, uint8_t *text); void vnc_client_cut_text_ext(VncState *vs, int32_t len, uint32_t flags, ui= nt8_t *data); --=20 2.43.0 From nobody Mon Sep 28 00:10:33 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; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass(p=none dis=none) header.from=nutanix.com ARC-Seal: i=2; a=rsa-sha256; t=1787055322; cv=pass; d=zohomail.com; s=zohoarc; b=PgT2b+Y3vbmOrXwZf4kZEECjec/RVILFQTrDDVjPvTK3rckxJsTIkAH4QUWfhnsC1Mf1TpXeA3yeZvukOHAQea6wEAF54N3r4CKArP64l/f+yE+JWFGVis7xV8C08lJe0cYjUHx2rUkkTzXpcB6qwqCSvAFGCSiOln1iNd21M0c= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787055322; h=Content-Type: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=4+LDeRycqrI453zb1Xm10OmBkAbhWTgiISqq6MKhBmM=; b=BC92R4dyGRew1vVG77OHd5pKzyOO5bQQNOG3n8SBB3mC4DADU9oopt+jNgCaoX9NPU/BWK+7O45Eqtufz5j4ReAIg5c/Ap074+H0f1aNU4Syhij24su3bwHH+Y5NhnVa0yr6apb5UyKbRyY8uoz+u0P2yShkn1Jk6G+ohX3xi+s= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787055322898834.6784201174556; Tue, 18 Aug 2026 05:15:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwIiJ-0000t0-FW; Tue, 18 Aug 2026 08:14:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wwIiC-0000qn-7b for qemu-devel@nongnu.org; Tue, 18 Aug 2026 08:14:36 -0400 Received: from mx0b-002c1b01.pphosted.com ([148.163.155.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wwIiA-0001ME-DF for qemu-devel@nongnu.org; Tue, 18 Aug 2026 08:14:35 -0400 Received: from pps.filterd (m0127844.ppops.net [127.0.0.1]) by mx0b-002c1b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67IA5hRb1096263; Tue, 18 Aug 2026 05:14:33 -0700 Received: from mw6pr02cu001.outbound.protection.outlook.com (mail-westus2azon11022123.outbound.protection.outlook.com [52.101.48.123]) by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 4g2qmxpccq-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 18 Aug 2026 05:14:33 -0700 (PDT) Received: from BL0PR02MB3827.namprd02.prod.outlook.com (2603:10b6:207:42::26) by LV3PR02MB10210.namprd02.prod.outlook.com (2603:10b6:408:21a::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.17; Tue, 18 Aug 2026 12:14:31 +0000 Received: from BL0PR02MB3827.namprd02.prod.outlook.com ([fe80::5f5f:bb6:29f7:afd]) by BL0PR02MB3827.namprd02.prod.outlook.com ([fe80::5f5f:bb6:29f7:afd%4]) with mapi id 15.21.0339.007; Tue, 18 Aug 2026 12:14:31 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= proofpoint20171006; bh=4+LDeRycqrI453zb1Xm10OmBkAbhWTgiISqq6MKhB mM=; b=XiFTyeby3y5WWB88dEeInTHTw2ysmhF+CR1f73Np/rZgdaNhCYYHzKGQh RcOAfHC48BcQXxO7e96a2lC1xg+e6FNNx7LuCUXH2EOQ70v5xuG6SKRnx1xSC9q0 BrmRR+xqVD0AiQnnFBH9720e4ikqP0v63fYU4CgQ0RuKl54QCRr6lNmEZXpy+zzw NPxwd+98QxZ+G40hO68vAsFkGtEjzl2AOqXQP51vMAP8Js3UpRMHa6W1w7gH/Sxa faOHdod/H16oQbjFO+olJVd/grPf327byWgxVXLBCqFqObB1IyuMNw0CbXOkf479 3DzM7isijxHJMHr66UyTManKDcUOQ== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NdYJadsEW+fgX7lcarigtnxgLIZjLJkom/V8fJfYI/eKVFM8Su4UaSvr3dIjjvulZf0gH4xQL+u8nTGyiZCvfTrNY/S1VC+pHjnwTEarFxk1bX/M7WUthW53vFAS7DoSS3piuA9ItqeZk9AxuVzl1DQmfZq9jYg+gmGpEQNwnK0VrbPUFHaSODobSNY/mo4+XrdjOuH1c8FjdGTW9bbBaPzIgFUyrtPVAOGINeC0mVHnSIB9TzhF13v3zj95S08jr510J1uAMHg0S2WtaHkGn8irkhoCzPbbJEMFS5KZwYvbuYwmQkFwuBQF96b5TUAAz1B8J2mXGFIqSD8jEQs0YA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=4+LDeRycqrI453zb1Xm10OmBkAbhWTgiISqq6MKhBmM=; b=vPF0XSJ2HV2zaq36Y3vZB5OF0nb7BK22zA9G6ghkeFjXCu87d3IK9hv0xpp892jWAd/gd+3dJ1ObhtmszOUqNVUV61krCwz+TvM8wmF3wQD3BFMBUi+MLU8rg94s8PAMtmub0l/e1Ov3vTOFNSA5x04oKQTCIMQkl2EOcEnLcSlb8ZxKCgHXAAmK3z0U45wWIVxF4G1Wxb1gdKgF5kTx3rnEcrEnUEobwR77JuHMc/UjcMRk4NrVNtMVlZjT8hKyg2yLYl7OUZ//hmKCCC1cUgS/RfzCo/bV8Zf3MWRhjy0oH2khVjbMissscPhJwUiRZSxNxPcXJSSwAum9CcY/Ow== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nutanix.com; dmarc=pass action=none header.from=nutanix.com; dkim=pass header.d=nutanix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4+LDeRycqrI453zb1Xm10OmBkAbhWTgiISqq6MKhBmM=; b=hqy3bwPGWp/1zubkCApxqVkK+8O3+zvxdgxba8VmYdW1YxVM6AfUEyaX2soVVYcFBvXnldHk/EpkeqWc9JBGO+VjaOQCHS7LHsiqoTAj5AeZ9VFpSeNuUfMg1OkyNDvKDjEN1gUqRZLq6mlBhddXRlkWtif+CNsx/0BdKOwfYkKcI+T5D0J3m685tL5Df/HNkSyfwFjAE0zrhrzAIUQsydSW994fs6iB1aP+1CFUOEmudxyFy+hqQxP3L/qArjGq1iNiuckTDz3sTb7dskXyg2rhMTC701I7PVfpGBlyMPNc81irI82mKnWp3t5e63DZM1zcvCY/Mcz5PoZk626oFg== From: Lukasz Kornicki To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Subject: [PATCH 4/4] ui/vnc: notify client of clipboard peer status Date: Tue, 18 Aug 2026 14:14:13 +0200 Message-ID: <20260818121413.2660786-5-lucas.kornicki@nutanix.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260818121413.2660786-1-lucas.kornicki@nutanix.com> References: <20260818121413.2660786-1-lucas.kornicki@nutanix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P190CA0005.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:5de::17) To BL0PR02MB3827.namprd02.prod.outlook.com (2603:10b6:207:42::26) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR02MB3827:EE_|LV3PR02MB10210:EE_ X-MS-Office365-Filtering-Correlation-Id: 8cb2148b-334f-44c4-a32a-08defd224243 x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|366016|23010399003|6133799003|3023799007|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: N5iGOh2C4IisfsVU7hLAY/yUjnuTJZCpn/Bl7SQPfKt3p/uoBDOzMMZ5UiOgCnhMrYVXlaZNWfNMTFvZwn+1u6hO1ufMhN2unCjt9fOwm6knjEb+V7sm2ZBDMTcnXXwqvUteW9Jh3ndMx6bDKGeeLl/S+wP5JuUXdA6Y+oi4OOUyc+e5LBdbMdhJ5C8DGZY9btXywmWfm9J9/F7qeUVi++cF4GPu1G53BwSxfKMWT/LRo+NUCZRp7XcUAEHiSTs4iY0IDo8iQQs+SbPAA11g9d+GaWOJKUwAQyrj+QOUQr+oMj5hy3NE6KEGOU2V55dkPtYO2Lm+Xw9PqJNnRKBp8ZHlOAqrDKNdL3LM+gU4t6tm089ZYK3dSR0ay2qqxMjCktzgjWepEiFl6fuMI9Sh1+QiT6jvkUGmZ/oMH2Z7VdWnyVPbI7zOLh4pRUbKcunTWyRxGOFaHdvQwJvGkeG7wEDB825RxA7twGeP0PSmFMpViAJCsjjH8xq2Y6wJQy1EtNoGWyLZjeBI6W3mYgHpjL+bKpehdJWsWyJ2KRutJesyS4O8TTdOBrQEEl4BX5fuoVprhT4sHI+HffP1oKprdo66l8zISjjA4D+A+51l9oXHB7xOw+2gVmuhVMW7muY5ou3dNCMNc7QvxaC0ni1vsRpd3Kv4H7lZQRD8I22VCCw= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BL0PR02MB3827.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(23010399003)(6133799003)(3023799007)(56012099006)(10067099003)(22082099003)(18002099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?C0OSvRT1a2ciKzJ1TaRLKIViUorbapZYTJO9YUEdbH1PM5yLBv1NFfA8vAsH?= =?us-ascii?Q?eGDsz+AszQ8/HtFo8t8dxp8HLr/pKmLlmuzS4IvsruOhg3IjB15p3HmpA6j/?= =?us-ascii?Q?YT5eH2iADobsZGvcDd5NFiu8z5ljOyaR3lmcZ23UJQEqC8i1WA0XW7V0M0yL?= =?us-ascii?Q?PwefazX2QlaIAH9N0bHEuNECYobesubc7m/I4760d3KhhhfasLEhc3J/VtxQ?= =?us-ascii?Q?Ivw3XFPo0C+hX/yEYGYIw4ZxhV9/Ru255aUyzWHkQnbASy1vZp5p4Hm0Z9EH?= =?us-ascii?Q?WG5ms8DWl1gp4cli2hvUbYDdUrTufqkcRUXFVmDNtgF9qY49u0uud9H2wbVc?= =?us-ascii?Q?cmCDQwjx52CK7HBkmdUs7FF3yTGj//oOUQjUdLdEJKpcaTmjfzqidqf+eeo5?= =?us-ascii?Q?5Iwrv3LMaYwho36BONEAlXkTrkO2fV65+5aJvrR9y00/maC091pQ5PeLlzlV?= =?us-ascii?Q?grbya+UTp5/ueG6flzcUkaEObUCAHzCcjps8OQ3IpXPlq/K+S+n5Xm6NRoGx?= =?us-ascii?Q?V4G5hPgPrCzRXbRA5JuQgbYPUiQIhzLrJgd7mFm1XpZ35FSITv70qpRDM3IW?= =?us-ascii?Q?/ERNEGnC1YGKqY8u/3F2nC6mjjgCi3K0WQX9YuXDOGe8hE/3rTr3YxZvk5XE?= =?us-ascii?Q?U9f9woNkeSMB/DLC8/ie54y/DPQtQDr1dX35+PnQeR+Rpf1Ojewk24EaZ2tb?= =?us-ascii?Q?yRjD3trPjXBXorT7vtt7N+Kqq1GkHKjyRImReSpSkVJNxFp1/isM5pD6+TX7?= =?us-ascii?Q?FtY8zi5ZWSqdg7Sh9Q0lROD5ctxPoji7pW1xx6kwXmXfXXGionA7DyuSO+1j?= =?us-ascii?Q?0MNFsPUHE0FKMu54D0ge9jjOYT3UQSfj2GxBBIoxZ2yfpAMABV1E1dd4UI9H?= =?us-ascii?Q?PfS4yvwOLSPBJS+iSy0VxoAFg/DBH2gEmuY0MDQNntnNR342TpVcoIVyeyJ+?= =?us-ascii?Q?1qvuiLrruiBoEjwKv2bEpbJofUn9Eeql6Ynm4HaLkNp5jL2B/fqrqUNl0aDL?= =?us-ascii?Q?50kpNBUgO7x2NRXhjmrMICwnbC6cTKY8rflVVPqx8vIxr45jVSwjW7Au8maj?= =?us-ascii?Q?aKA6hZA9polStW8J5oWcWiDGOT3G/SIoo0GVNFrtEQQLpRd12u14/2P5X56D?= =?us-ascii?Q?WVHVc7YmAMBjRW8RKFVtkzSS299o1xzQA0Hg8/l6LoIVcpjKB88VsISzuLxG?= =?us-ascii?Q?7yWc2w6x5Zt2tAzBZgZOr26M6xHP100Nosi6N713RCBtLmlpNr8Wv4+70+Ty?= =?us-ascii?Q?sBk+VXw1FkWChLjqYl8JsItVEYQB2zgPdh2ASbrpk2tpjLZRazhUHEqyTjrL?= =?us-ascii?Q?oW7DUsd/fuHBPLr3Ew+v1FFPHsM/m3raII2FU9ntxdBkZFd9nqxdx6Yl/+y5?= =?us-ascii?Q?SXaggXKMf5qIq5G0MGlSn679BJkIOEEdjg2YGi1uD1EHQLCenSkKamLBYRJh?= =?us-ascii?Q?3e0f6TKq5BrI6+g/+tspqnu+e1730IBxCExlnlqd2BioDzLhWBTiEpLRxQfP?= =?us-ascii?Q?CB+vQkp5K+2kqWI/tfmdy1uIrTGo67iPMNQty+ff5RmFlVykBZ8O2UEs12kD?= =?us-ascii?Q?/uq0VTQWcwDEduVRITYSeJipLZTOehdXN7Oam8NzehIiOwNeaJwNS1DKCMlG?= =?us-ascii?Q?cyitnjj7Do0agym9Q2pPI2X7Wl67KqvKFR6rnUzTMH9boQdlNVHTBa/V+oX0?= =?us-ascii?Q?j2jKthjCzOKDK1Fapi7p496oV6n5guO7J86TKPiwHHd69RW7VaEm5yIGVmvl?= =?us-ascii?Q?JHL+mrIk0w=3D=3D?= X-Exchange-RoutingPolicyChecked: r1TgYxX1UxwSZ3NzDpTf5OzZOVYoCMT5QbE5YjvR64dwQad1xeRz5896tr3lsbG3zehZ5wSirOJRxdHwhHAs2YDZgcJV+vocIOUno8b/TVJP+LokAhB44YUCE2B5Z0gPzChK6esadswY2z/wTdvhQioe5wJrnGrah93Nn7eVxuQL+Sx4qDWMEphFs+ZLkNMbZsLeHDzKUSouwMBf6hpmIpTzsltxySsaLMNgCDs25xfsLut2fa0vxnK9O4KkSflyxuj8DxsCTF/pRnawE5yn8NDuw3vSlCmulzGJFm7iyZMdpk/FPEiQRNSbsMH9vcigtxh9KYDWcGwVOMNmNs1pPg== X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8cb2148b-334f-44c4-a32a-08defd224243 X-MS-Exchange-CrossTenant-AuthSource: BL0PR02MB3827.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2026 12:14:31.6681 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bb047546-786f-4de1-bd75-24e5b6f79043 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: rGb3SGCjChvvbRAUMj6T2TN93BA6P1Hklaa+AR+fupeXqPty9PBeghFjUO/1DN82rF8BuYX+JhIUsMX3K9vIefMEoUsgLDuScs5NVk3W0qk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR02MB10210 X-Authority-Analysis: v=2.4 cv=Q+riJY2a c=1 sm=1 tr=0 ts=6a844ca9 cx=c_pps a=qHanueHLqd5GN4xLMHIYUw==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=Sv0fKeRqtYgA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=0LlEyIVc8U2lsR7dKhuH:22 a=64Cc0HZtAAAA:8 a=-3kcguB0CHop7p9IiFYA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE4MDA5MCBTYWx0ZWRfXzCa38OWf3H+a BEIVaJ8pmmU8uR8QTXYHCA61OuzZ6tnPyaiYjdd/kzX7nRo2urFkVB6zgEVNqaC9asH6VOT5zol PSn7NzfP9lYqPoNkZTj0udEcZr8AJZUqwE3KmG7NFHiI/Q40uxTBLt5XMQUGlW7MXsDz1ZHiJPQ 3Xm11tYLFEhUcdALi6aIjfISZMYp9nQbk1Q3VgTWZW/P29OZDQrjm6DIN4gRFc0ISmeYtP9Fe1s KuMeUcV/TvJ28huCPq//7xVOygYPNY9jIRPqFtHtOH3+13JzsZLWqavmnpybP2XRVAWBVLYR0Li BAKsb8TSWSeG2A11glfT4DBNC8G95LLVyYooDcQMSV99I6II1yHI2RjOQPF673eUkmR/hXvP4qV L8vDTXh04G0OsHgE0Ohdcq/Q5CC04TE+4TTGvESdHbuj3F/l6j8CMO1NEEsFGqawVYy5uMsisfh 51/fX9bJ2eJP/JDdb7A== X-Proofpoint-GUID: hM6ZpQBtEV5LjiqgXZuzgj2_XSXb8jXP X-Proofpoint-ORIG-GUID: hM6ZpQBtEV5LjiqgXZuzgj2_XSXb8jXP X-Proofpoint-Spam-Info: AW1haW4tMjYwODE4MDA5MCBTYWx0ZWRfX2iG5X//Br+3i LkqAbr0ntZo1RQCJEhJm9c+iS8jS7XUo5SLPRf4VMHZ42PRCPdbX7k0fx2AlGTEjRJSMSnDyyT4 3An5OEe6491aX46hoP33KueaN9BuoKs= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-18_01,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Reason: safe 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=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.155.12; envelope-from=lucas.kornicki@nutanix.com; helo=mx0b-002c1b01.pphosted.com X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.343, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, 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 @nutanix.com) X-ZM-MESSAGEID: 1787055323687158500 Content-Type: text/plain; charset="utf-8" Introduce a new vnc message (VNC_MSG_SERVER_QEMU_CLIPBOARD_STATUS) and the corresponding feature/encoding. When a client requests this feature, the server will inform the client whether a guest clipboard peer is present. The server will repeat the notification each time availability of a guest clipboard peer changes. This change enables the VNC client to determine if a guest side clipboard peer is available for clipboard exchange and react to changes of its availability. Until now the VNC clipboard peer was only registered when VNC_FEATURE_CLIPBOARD_EXT was enabled. With this change the VNC peer can be registered just for the purpose of receiving peer status updates. This requires introducing a VNC_FEATURE_CLIPBOARD_EXT guard before the QEMU_CLIPBOARD_UPDATE_INFO handler which previously only ran if VNC_FEATURE_CLIPBOARD_EXT was enabled. Change-Id: Id0897a24fae103288c399f73e808ed6c07018359 Signed-off-by: Lukasz Kornicki --- ui/trace-events | 1 + ui/vnc-clipboard.c | 31 ++++++++++++++++++++++++++++++- ui/vnc.c | 6 ++++++ ui/vnc.h | 8 ++++++++ 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/ui/trace-events b/ui/trace-events index 917d116d90..d2fe153b7d 100644 --- a/ui/trace-events +++ b/ui/trace-events @@ -48,6 +48,7 @@ vnc_msg_server_ext_desktop_resize(void *state, void *ioc,= int width, int height, vnc_msg_client_audio_enable(void *state, void *ioc) "VNC client msg audio = enable state=3D%p ioc=3D%p" vnc_msg_client_audio_disable(void *state, void *ioc) "VNC client msg audio= disable state=3D%p ioc=3D%p" vnc_msg_client_audio_format(void *state, void *ioc, int fmt, int channels,= int freq) "VNC client msg audio format state=3D%p ioc=3D%p fmt=3D%d channe= ls=3D%d freq=3D%d" +vnc_clipboard_peer_status_send(void *state, bool present) "VNC server clip= board peer status state=3D%p present=3D%d" vnc_msg_client_cut_text(void *state, void *ioc, int len) "VNC client msg c= ut text state=3D%p ioc=3D%p len=3D%u" vnc_msg_client_cut_text_ext(void *state, void *ioc, int len, int flags) "V= NC client msg cut text state=3D%p ioc=3D%p len=3D%u flags=3D%u" vnc_msg_client_ext_key_event(void *state, void *ioc, int down, int sym, in= t keycode) "VNC client msg ext key event state=3D%p ioc=3D%p down=3D%u sym= =3D%u keycode=3D%u" diff --git a/ui/vnc-clipboard.c b/ui/vnc-clipboard.c index 67f710f6ed..4ecc4489e4 100644 --- a/ui/vnc-clipboard.c +++ b/ui/vnc-clipboard.c @@ -26,6 +26,7 @@ #include "qemu/error-report.h" #include "vnc.h" #include "vnc-jobs.h" +#include "trace.h" =20 static uint8_t *inflate_buffer(uint8_t *in, uint32_t in_len, uint32_t *siz= e) { @@ -224,6 +225,23 @@ static void vnc_clipboard_update_info(VncState *vs, Qe= muClipboardInfo *info) } } =20 +void vnc_clipboard_peer_status_send(VncState *vs, bool present) +{ + if (!vnc_has_feature(vs, VNC_FEATURE_CLIPBOARD_STATUS)) { + return; + } + + trace_vnc_clipboard_peer_status_send(vs, present); + + vnc_lock_output(vs); + vnc_write_u8(vs, VNC_MSG_SERVER_QEMU); + vnc_write_u8(vs, VNC_MSG_SERVER_QEMU_CLIPBOARD_STATUS); + vnc_write_u16(vs, present ? VNC_CLIPBOARD_PEER_PRESENT + : VNC_CLIPBOARD_PEER_ABSENT); + vnc_unlock_output(vs); + vnc_flush(vs); +} + static void vnc_clipboard_notify(Notifier *notifier, void *data) { VncState *vs =3D container_of(notifier, VncState, cbpeer.notifier); @@ -231,13 +249,24 @@ static void vnc_clipboard_notify(Notifier *notifier, = void *data) =20 switch (notify->type) { case QEMU_CLIPBOARD_UPDATE_INFO: + /* ignore the update if client does not want ext messages */ + if (!vnc_has_feature(vs, VNC_FEATURE_CLIPBOARD_EXT)) { + return; + } + vnc_clipboard_update_info(vs, notify->info); return; case QEMU_CLIPBOARD_RESET_SERIAL: /* ignore */ return; case QEMU_CLIPBOARD_PEER_UPDATE: - /* ignore */ + /* only guest side peers affect the status we relay to the client = */ + if (!notify->peer_update.peer->guest) { + return; + } + + vnc_clipboard_peer_status_send(vs, + qemu_clipboard_guest_peer_present()); return; } } diff --git a/ui/vnc.c b/ui/vnc.c index 656768f9c9..9e44a20311 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -2191,6 +2191,12 @@ static void set_encodings(VncState *vs, int32_t *enc= odings, size_t n_encodings) vnc_set_feature(vs, VNC_FEATURE_CLIPBOARD_EXT); vnc_server_cut_text_caps(vs); break; + case VNC_ENCODING_CLIPBOARD_STATUS: + vnc_set_feature(vs, VNC_FEATURE_CLIPBOARD_STATUS); + vnc_clipboard_peer_register(vs); + vnc_clipboard_peer_status_send(vs, + qemu_clipboard_guest_peer_present()); + break; case VNC_ENCODING_COMPRESSLEVEL0 ... VNC_ENCODING_COMPRESSLEVEL0 += 9: vc->worker.tight.compression =3D (enc & 0x0F); break; diff --git a/ui/vnc.h b/ui/vnc.h index d8b0070396..6e8fa66e9c 100644 --- a/ui/vnc.h +++ b/ui/vnc.h @@ -422,6 +422,7 @@ enum { #define VNC_ENCODING_DESKTOP_RESIZE_EXT 0XFFFFFECC /* -308 */ #define VNC_ENCODING_XVP 0XFFFFFECB /* -309 */ #define VNC_ENCODING_ALPHA_CURSOR 0XFFFFFEC6 /* -314 */ +#define VNC_ENCODING_CLIPBOARD_STATUS 0XFFFFFEC5 /* -315 */ #define VNC_ENCODING_WMVi 0x574D5669 #define VNC_ENCODING_CLIPBOARD_EXT 0xc0a1e5ce =20 @@ -466,6 +467,7 @@ enum VncFeatures { VNC_FEATURE_LED_STATE, VNC_FEATURE_XVP, VNC_FEATURE_CLIPBOARD_EXT, + VNC_FEATURE_CLIPBOARD_STATUS, VNC_FEATURE_AUDIO, }; =20 @@ -507,6 +509,7 @@ enum VncFeatures { =20 /* QEMU server -> client message IDs */ #define VNC_MSG_SERVER_QEMU_AUDIO 1 +#define VNC_MSG_SERVER_QEMU_CLIPBOARD_STATUS 2 =20 =20 =20 @@ -541,6 +544,10 @@ enum VncFeatures { #define VNC_CLIPBOARD_NOTIFY (1 << 27) #define VNC_CLIPBOARD_PROVIDE (1 << 28) =20 +/* guest side clipboard peer status */ +#define VNC_CLIPBOARD_PEER_ABSENT 0 +#define VNC_CLIPBOARD_PEER_PRESENT 1 + VncDisplay *vnc_display_new(const char *id, Error **errp); void vnc_display_free(VncDisplay *vd); =20 @@ -637,6 +644,7 @@ void vnc_zrle_clear(VncWorker *worker); =20 /* vnc-clipboard.c */ void vnc_clipboard_peer_register(VncState *vs); +void vnc_clipboard_peer_status_send(VncState *vs, bool present); void vnc_server_cut_text_caps(VncState *vs); void vnc_client_cut_text(VncState *vs, size_t len, uint8_t *text); void vnc_client_cut_text_ext(VncState *vs, int32_t len, uint32_t flags, ui= nt8_t *data); --=20 2.43.0