From nobody Wed May 1 21:20:40 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1610459006; cv=none; d=zohomail.com; s=zohoarc; b=lTaHrNppOHkG15L9gnzkBNtD08IJfKgR2jdXqVeJJvNXpkFZLxXF5Qwq73epaCr3+E4Uz0F6UxO5X5Y/e9LCdrRX5nBaCGfSlEPvLtWTcQ3Nw+XbpBTThrqcU+gw9uOgw6myJ10cBp2p7wJ9kkgJEjk1te+ySqUbBspVUw8tliQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610459006; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=pjkxtZHzed+I3lv7WlWTlSHPlWZGfm1m8qpmOsPFg1o=; b=X2tzW1WBTa7BHZwSyFA3FX2n7ETPWkjPYboHIgVBqTrsWNka315MfjddQNh/CNuPvqtXLJAI6u4ClLxFR/egp5HCox6v+W+C9a/j5JFi4dQMiU7Iw99vWfX/3nGunhqHwZ4bquZdE8drNO/9N03+kq4SYLCAgDEWvliMlH+tR5s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610459006180819.1461513605562; Tue, 12 Jan 2021 05:43:26 -0800 (PST) Received: from localhost ([::1]:39460 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kzJxF-0003ei-2l for importer@patchew.org; Tue, 12 Jan 2021 08:43:25 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39366) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kzJvS-0002O9-MS for qemu-devel@nongnu.org; Tue, 12 Jan 2021 08:41:35 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:32792) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kzJvR-0004Sp-3A for qemu-devel@nongnu.org; Tue, 12 Jan 2021 08:41:34 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-321-6nf6WuBvOlqdJL3-Oi8ERA-1; Tue, 12 Jan 2021 08:41:30 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C261C800479 for ; Tue, 12 Jan 2021 13:41:29 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-114-197.ams2.redhat.com [10.36.114.197]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 929D75DA2E; Tue, 12 Jan 2021 13:41:22 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id C275C18000A7; Tue, 12 Jan 2021 14:41:20 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1610458892; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pjkxtZHzed+I3lv7WlWTlSHPlWZGfm1m8qpmOsPFg1o=; b=eXqg3jOE5eYL3E4JmhiFP6rpn6jdZ6Ca1x/dqqhMRXiHS7k7obb6tFH7mo9p/2JkTPRXMN Xb4Kem+EGly5dLmhSdUM6b9/o5CvnbWCtGDtizMddpoiw6WO8PzSso5HO6MuSzSv7Ozt8n h1/4mSMbdUUht07fgjtC/UsfMVzTrQ4= X-MC-Unique: 6nf6WuBvOlqdJL3-Oi8ERA-1 From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 1/3] vnc: move check into vnc_cursor_define Date: Tue, 12 Jan 2021 14:41:18 +0100 Message-Id: <20210112134120.2031837-2-kraxel@redhat.com> In-Reply-To: <20210112134120.2031837-1-kraxel@redhat.com> References: <20210112134120.2031837-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" 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=216.205.24.124; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -29 X-Spam_score: -3.0 X-Spam_bar: --- X-Spam_report: (-3.0 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.251, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Move the check whenever a cursor exists into the vnc_cursor_define() function so callers don't have to do it. Suggested-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Gerd Hoffmann Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Marc-Andr=C3=A9 Lureau --- ui/vnc.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ui/vnc.c b/ui/vnc.c index 7452ac7df2ce..84c4972b895b 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -792,9 +792,7 @@ static void vnc_dpy_switch(DisplayChangeListener *dcl, QTAILQ_FOREACH(vs, &vd->clients, next) { vnc_colordepth(vs); vnc_desktop_resize(vs); - if (vs->vd->cursor) { - vnc_cursor_define(vs); - } + vnc_cursor_define(vs); memset(vs->dirty, 0x00, sizeof(vs->dirty)); vnc_set_area_dirty(vs->dirty, vd, 0, 0, vnc_width(vd), @@ -928,6 +926,10 @@ static int vnc_cursor_define(VncState *vs) QEMUCursor *c =3D vs->vd->cursor; int isize; =20 + if (!vs->vd->cursor) { + return -1; + } + if (vnc_has_feature(vs, VNC_FEATURE_ALPHA_CURSOR)) { vnc_lock_output(vs); vnc_write_u8(vs, VNC_MSG_SERVER_FRAMEBUFFER_UPDATE); @@ -2137,9 +2139,7 @@ static void set_encodings(VncState *vs, int32_t *enco= dings, size_t n_encodings) vnc_desktop_resize(vs); check_pointer_type_change(&vs->mouse_mode_notifier, NULL); vnc_led_state_change(vs); - if (vs->vd->cursor) { - vnc_cursor_define(vs); - } + vnc_cursor_define(vs); } =20 static void set_pixel_conversion(VncState *vs) --=20 2.29.2 From nobody Wed May 1 21:20:40 2024 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=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1610459061; cv=none; d=zohomail.com; s=zohoarc; b=jw8Zo2ti5h0XXxC6tkfroQFchV40tpWID/gU+PHr9RAVjXx/roB5Un0p1fRvgKw10b+GH9Fz1fOD+UntwWz6q73ZDKANHaVHl5N9212siLRk0tEBuosWszB0VxjwiIHCsdcw1CeewNPHCeJbBbuAbHOwWp+LzR1J/Pgut6twbnU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610459061; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=EPLAXC6aaQJUHIPBk5HHgn4lxB/4Nt8pLP7B3Gjgy8c=; b=CuuFv6HrLDUvukvlbGxMxfLROgZzaHYV3dEjD1yxhICoZ9V6oTGdyck6B8mdqz6e3UyGDCM2iLiftydEemJSlYmkELcSW9kjA64LpmZYMNxH84GiM7MKzJX3i6IMIbB62oX9Lv7ofycYIGuFGfustQqU2W5bROkegVwxn3T/zhs= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610459061311269.1485230181314; Tue, 12 Jan 2021 05:44:21 -0800 (PST) Received: from localhost ([::1]:41940 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kzJy8-0004hT-6V for importer@patchew.org; Tue, 12 Jan 2021 08:44:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39348) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kzJvS-0002NU-8V for qemu-devel@nongnu.org; Tue, 12 Jan 2021 08:41:34 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:29324) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kzJvP-0004RJ-JO for qemu-devel@nongnu.org; Tue, 12 Jan 2021 08:41:33 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-322-kwOvCKjKMFeSpjQGP9G-xA-1; Tue, 12 Jan 2021 08:41:27 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 9C94F8144FD for ; Tue, 12 Jan 2021 13:41:26 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-114-197.ams2.redhat.com [10.36.114.197]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 934485DA30; Tue, 12 Jan 2021 13:41:22 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id CD92C1800604; Tue, 12 Jan 2021 14:41:20 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1610458889; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=EPLAXC6aaQJUHIPBk5HHgn4lxB/4Nt8pLP7B3Gjgy8c=; b=L/WFIte8u8RR13sc/yscxgXVBagdhbAGaPMEOEkT+LQj32q7fjjXwLYbmQ/LMKJ7NQnD5k RuCreRcZq9jeAREHvzqHnUsGOJWuwtDnluzXXPhivWAHPZ4wYknKI3TmVeZcRgrouGf4Ut uAKApQ30kNNUIXxqymtxcSrSG+xqKJI= X-MC-Unique: kwOvCKjKMFeSpjQGP9G-xA-1 From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 2/3] vnc: move initialization to framebuffer_update_request Date: Tue, 12 Jan 2021 14:41:19 +0100 Message-Id: <20210112134120.2031837-3-kraxel@redhat.com> In-Reply-To: <20210112134120.2031837-1-kraxel@redhat.com> References: <20210112134120.2031837-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com 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=63.128.21.124; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -29 X-Spam_score: -3.0 X-Spam_bar: --- X-Spam_report: (-3.0 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.251, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" qemu sends various state info like current cursor shape to newly connected clients in response to a set_encoding message. This is not correct accordi= ng to the rfb spec. Send that information in response to a full (incremental= =3D0) framebuffer update request instead. Also send the resize information unconditionally, not only in case of an actual server-side change. This makes the qemu vnc server conform to the spec and allows clients to request the complete vnc server state without reconnect. Signed-off-by: Gerd Hoffmann Reviewed-by: Daniel P. Berrang=C3=A9 --- ui/vnc.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/ui/vnc.c b/ui/vnc.c index 84c4972b895b..8df63b349b38 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -660,10 +660,6 @@ static void vnc_desktop_resize(VncState *vs) if (vs->ioc =3D=3D NULL || !vnc_has_feature(vs, VNC_FEATURE_RESIZE)) { return; } - if (vs->client_width =3D=3D pixman_image_get_width(vs->vd->server) && - vs->client_height =3D=3D pixman_image_get_height(vs->vd->server)) { - return; - } =20 assert(pixman_image_get_width(vs->vd->server) < 65536 && pixman_image_get_width(vs->vd->server) >=3D 0); @@ -2013,6 +2009,10 @@ static void framebuffer_update_request(VncState *vs,= int incremental, } else { vs->update =3D VNC_STATE_UPDATE_FORCE; vnc_set_area_dirty(vs->dirty, vs->vd, x, y, w, h); + vnc_colordepth(vs); + vnc_desktop_resize(vs); + vnc_led_state_change(vs); + vnc_cursor_define(vs); } } =20 @@ -2136,10 +2136,7 @@ static void set_encodings(VncState *vs, int32_t *enc= odings, size_t n_encodings) break; } } - vnc_desktop_resize(vs); check_pointer_type_change(&vs->mouse_mode_notifier, NULL); - vnc_led_state_change(vs); - vnc_cursor_define(vs); } =20 static void set_pixel_conversion(VncState *vs) --=20 2.29.2 From nobody Wed May 1 21:20:40 2024 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=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1610459098; cv=none; d=zohomail.com; s=zohoarc; b=nEXEO5ckuIr96cBwRVgUfELJKyIMYOaHzXddo+bwsPBKOooHE9enxlAgDZjDIWZFHK4vzR37UDO2r8Axbyjh0olr6p3qFQdqMfUjG6ETOA4/xgJ6OGjAGuBHwx+4incwsrrpyqzumYR8vGiFDXn2riWWaCh6hB57veKeACqg2Mo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610459098; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=BcNX9yBSn5n9zsm2MafV9PjzHdK3Ez3AqfSD04Ap6fU=; b=AoMZzG0ywziO012N4Rd/iVKGnkFX7TiSu+LoV3dXV2PFYqtQLP+ndhE0b4aG0BgkBPpzTzSLCKlZMQwAeZhcGYmxto8OXNUQ/8AMizLYu4CUeAaK7w2FyIXxlbScF/rwPeh5sm8JTPQnev90gELWt05NQ0n52EyClct2+ZWEBy4= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610459098475788.6368616288182; Tue, 12 Jan 2021 05:44:58 -0800 (PST) Received: from localhost ([::1]:44732 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kzJyi-0005vD-Ae for importer@patchew.org; Tue, 12 Jan 2021 08:44:56 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39376) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kzJvU-0002Oa-7N for qemu-devel@nongnu.org; Tue, 12 Jan 2021 08:41:36 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:50119) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kzJvR-0004Ss-7a for qemu-devel@nongnu.org; Tue, 12 Jan 2021 08:41:36 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-478-dQlgcfnmMUOEBQxXfByOBw-1; Tue, 12 Jan 2021 08:41:29 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id DCAB9107ACF9 for ; Tue, 12 Jan 2021 13:41:28 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-114-197.ams2.redhat.com [10.36.114.197]) by smtp.corp.redhat.com (Postfix) with ESMTPS id AC3E92BFEE; Tue, 12 Jan 2021 13:41:22 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id DA68E1800608; Tue, 12 Jan 2021 14:41:20 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1610458892; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=BcNX9yBSn5n9zsm2MafV9PjzHdK3Ez3AqfSD04Ap6fU=; b=GDoO/VIHY7ydfYyPGZ+sbyPCot4gqbJhVGMv/RH/SFTzNRjYNL1vCQfkAewf7qOh5a5myj 9Zd43BSM6cOq+h+kIMMC4DmtlIDU5Pbi1wbs9fJ1e4S/cKz0MAJrYXCynK/W3loVrloYcZ +Bc/kH73jlZTpV5pqvp3HeEQdmWW3BI= X-MC-Unique: dQlgcfnmMUOEBQxXfByOBw-1 From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 3/3] vnc: add support for extended desktop resize Date: Tue, 12 Jan 2021 14:41:20 +0100 Message-Id: <20210112134120.2031837-4-kraxel@redhat.com> In-Reply-To: <20210112134120.2031837-1-kraxel@redhat.com> References: <20210112134120.2031837-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com 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=63.128.21.124; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -29 X-Spam_score: -3.0 X-Spam_bar: --- X-Spam_report: (-3.0 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.251, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" The extended desktop resize encoding adds support for (a) clients sending resize requests to the server, and (b) multihead support. This patch implements (a). All resize requests are rejected by qemu. Qemu can't resize the framebuffer on its own, this is in the hands of the guest, so all qemu can do is forward the request to the guest. Should the guest actually resize the framebuffer we can notify the vnc client later with a separate message. This requires support in the display device. Works with virtio-gpu. https://github.com/rfbproto/rfbproto/blob/master/rfbproto.rst#extendeddeskt= opsize-pseudo-encoding Signed-off-by: Gerd Hoffmann Reviewed-by: Daniel P. Berrang=C3=A9 --- ui/vnc.h | 2 ++ ui/vnc.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/ui/vnc.h b/ui/vnc.h index c8d3ad9ec496..77a310947bd6 100644 --- a/ui/vnc.h +++ b/ui/vnc.h @@ -442,6 +442,7 @@ enum { =20 enum VncFeatures { VNC_FEATURE_RESIZE, + VNC_FEATURE_RESIZE_EXT, VNC_FEATURE_HEXTILE, VNC_FEATURE_POINTER_TYPE_CHANGE, VNC_FEATURE_WMVI, @@ -456,6 +457,7 @@ enum VncFeatures { }; =20 #define VNC_FEATURE_RESIZE_MASK (1 << VNC_FEATURE_RESIZE) +#define VNC_FEATURE_RESIZE_EXT_MASK (1 << VNC_FEATURE_RESIZE_EXT) #define VNC_FEATURE_HEXTILE_MASK (1 << VNC_FEATURE_HEXTILE) #define VNC_FEATURE_POINTER_TYPE_CHANGE_MASK (1 << VNC_FEATURE_POINTER_TYP= E_CHANGE) #define VNC_FEATURE_WMVI_MASK (1 << VNC_FEATURE_WMVI) diff --git a/ui/vnc.c b/ui/vnc.c index 8df63b349b38..d4a161ac1393 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -654,10 +654,35 @@ void vnc_framebuffer_update(VncState *vs, int x, int = y, int w, int h, vnc_write_s32(vs, encoding); } =20 +static void vnc_desktop_resize_ext(VncState *vs, int reject_reason) +{ + vnc_lock_output(vs); + vnc_write_u8(vs, VNC_MSG_SERVER_FRAMEBUFFER_UPDATE); + vnc_write_u8(vs, 0); + vnc_write_u16(vs, 1); /* number of rects */ + vnc_framebuffer_update(vs, + reject_reason ? 1 : 0, + reject_reason, + vs->client_width, vs->client_height, + VNC_ENCODING_DESKTOP_RESIZE_EXT); + vnc_write_u8(vs, 1); /* number of screens */ + vnc_write_u8(vs, 0); /* padding */ + vnc_write_u8(vs, 0); /* padding */ + vnc_write_u8(vs, 0); /* padding */ + vnc_write_u32(vs, 0); /* screen id */ + vnc_write_u16(vs, 0); /* screen x-pos */ + vnc_write_u16(vs, 0); /* screen y-pos */ + vnc_write_u16(vs, vs->client_width); + vnc_write_u16(vs, vs->client_height); + vnc_write_u32(vs, 0); /* screen flags */ + vnc_unlock_output(vs); + vnc_flush(vs); +} =20 static void vnc_desktop_resize(VncState *vs) { - if (vs->ioc =3D=3D NULL || !vnc_has_feature(vs, VNC_FEATURE_RESIZE)) { + if (vs->ioc =3D=3D NULL || (!vnc_has_feature(vs, VNC_FEATURE_RESIZE) && + !vnc_has_feature(vs, VNC_FEATURE_RESIZE_EXT)))= { return; } =20 @@ -667,6 +692,12 @@ static void vnc_desktop_resize(VncState *vs) pixman_image_get_height(vs->vd->server) >=3D 0); vs->client_width =3D pixman_image_get_width(vs->vd->server); vs->client_height =3D pixman_image_get_height(vs->vd->server); + + if (vnc_has_feature(vs, VNC_FEATURE_RESIZE_EXT)) { + vnc_desktop_resize_ext(vs, 0); + return; + } + vnc_lock_output(vs); vnc_write_u8(vs, VNC_MSG_SERVER_FRAMEBUFFER_UPDATE); vnc_write_u8(vs, 0); @@ -2102,6 +2133,9 @@ static void set_encodings(VncState *vs, int32_t *enco= dings, size_t n_encodings) case VNC_ENCODING_DESKTOPRESIZE: vs->features |=3D VNC_FEATURE_RESIZE_MASK; break; + case VNC_ENCODING_DESKTOP_RESIZE_EXT: + vs->features |=3D VNC_FEATURE_RESIZE_EXT_MASK; + break; case VNC_ENCODING_POINTER_TYPE_CHANGE: vs->features |=3D VNC_FEATURE_POINTER_TYPE_CHANGE_MASK; break; @@ -2420,6 +2454,34 @@ static int protocol_client_msg(VncState *vs, uint8_t= *data, size_t len) break; } break; + case VNC_MSG_CLIENT_SET_DESKTOP_SIZE: + { + size_t size; + uint8_t screens; + + if (len < 8) { + return 8; + } + + screens =3D read_u8(data, 6); + size =3D 8 + screens * 16; + if (len < size) { + return size; + } + + if (dpy_ui_info_supported(vs->vd->dcl.con)) { + QemuUIInfo info; + memset(&info, 0, sizeof(info)); + info.width =3D read_u16(data, 2); + info.height =3D read_u16(data, 4); + dpy_set_ui_info(vs->vd->dcl.con, &info); + vnc_desktop_resize_ext(vs, 4 /* Request forwarded */); + } else { + vnc_desktop_resize_ext(vs, 3 /* Invalid screen layout */); + } + + break; + } default: VNC_DEBUG("Msg: %d\n", data[0]); vnc_client_error(vs); --=20 2.29.2