From c7b22c0a7c48a048703802eb6534930f18b9e44c Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Tue, 8 Dec 2020 12:57:29 +0100 Subject: console: drop qemu_console_get_ui_info Unused and duplicate (there is dpy_get_ui_info). Signed-off-by: Gerd Hoffmann Reviewed-by: Marc-André Lureau Reviewed-by: Daniel P. Berrangé Message-id: 20201208115737.18581-2-kraxel@redhat.com --- ui/console.c | 6 ------ 1 file changed, 6 deletions(-) (limited to 'ui') diff --git a/ui/console.c b/ui/console.c index 53dee8e26b..f995639e45 100644 --- a/ui/console.c +++ b/ui/console.c @@ -2122,12 +2122,6 @@ uint32_t qemu_console_get_head(QemuConsole *con) return con ? con->head : -1; } -QemuUIInfo *qemu_console_get_ui_info(QemuConsole *con) -{ - assert(con != NULL); - return &con->ui_info; -} - int qemu_console_get_width(QemuConsole *con, int fallback) { if (con == NULL) { -- cgit v1.2.3-55-g7522 From 5c4b107f88ad2679817b73445fa706c62db4d8e0 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Tue, 8 Dec 2020 12:57:30 +0100 Subject: console: allow con==NULL in dpy_{get, set}_ui_info and dpy_ui_info_supported Use active_console in that case like we do in many other places. Signed-off-by: Gerd Hoffmann Reviewed-by: Daniel P. Berrangé Message-id: 20201208115737.18581-3-kraxel@redhat.com --- ui/console.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'ui') diff --git a/ui/console.c b/ui/console.c index f995639e45..30e70be555 100644 --- a/ui/console.c +++ b/ui/console.c @@ -1544,19 +1544,27 @@ static void dpy_set_ui_info_timer(void *opaque) bool dpy_ui_info_supported(QemuConsole *con) { + if (con == NULL) { + con = active_console; + } + return con->hw_ops->ui_info != NULL; } const QemuUIInfo *dpy_get_ui_info(const QemuConsole *con) { - assert(con != NULL); + if (con == NULL) { + con = active_console; + } return &con->ui_info; } int dpy_set_ui_info(QemuConsole *con, QemuUIInfo *info) { - assert(con != NULL); + if (con == NULL) { + con = active_console; + } if (!dpy_ui_info_supported(con)) { return -1; -- cgit v1.2.3-55-g7522 From b0c693faa9afab66e6fcbec95437f870aba99a00 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Tue, 8 Dec 2020 12:57:31 +0100 Subject: vnc: use enum for features Use an enum for the vnc feature bits. That way they are enumerated automatically and we don't have to do that manually when adding or removing features. Signed-off-by: Gerd Hoffmann Reviewed-by: Marc-André Lureau Message-id: 20201208115737.18581-4-kraxel@redhat.com --- ui/vnc.h | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'ui') diff --git a/ui/vnc.h b/ui/vnc.h index 4e2637ce6c..262fcf179b 100644 --- a/ui/vnc.h +++ b/ui/vnc.h @@ -438,18 +438,20 @@ enum { * *****************************************************************************/ -#define VNC_FEATURE_RESIZE 0 -#define VNC_FEATURE_HEXTILE 1 -#define VNC_FEATURE_POINTER_TYPE_CHANGE 2 -#define VNC_FEATURE_WMVI 3 -#define VNC_FEATURE_TIGHT 4 -#define VNC_FEATURE_ZLIB 5 -#define VNC_FEATURE_COPYRECT 6 -#define VNC_FEATURE_RICH_CURSOR 7 -#define VNC_FEATURE_TIGHT_PNG 8 -#define VNC_FEATURE_ZRLE 9 -#define VNC_FEATURE_ZYWRLE 10 -#define VNC_FEATURE_LED_STATE 11 +enum VncFeatures { + VNC_FEATURE_RESIZE, + VNC_FEATURE_HEXTILE, + VNC_FEATURE_POINTER_TYPE_CHANGE, + VNC_FEATURE_WMVI, + VNC_FEATURE_TIGHT, + VNC_FEATURE_ZLIB, + VNC_FEATURE_COPYRECT, + VNC_FEATURE_RICH_CURSOR, + VNC_FEATURE_TIGHT_PNG, + VNC_FEATURE_ZRLE, + VNC_FEATURE_ZYWRLE, + VNC_FEATURE_LED_STATE, +}; #define VNC_FEATURE_RESIZE_MASK (1 << VNC_FEATURE_RESIZE) #define VNC_FEATURE_HEXTILE_MASK (1 << VNC_FEATURE_HEXTILE) -- cgit v1.2.3-55-g7522 From b151357aaff3b54e20e6966c1a9d8c85fde8fe21 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Tue, 8 Dec 2020 12:57:32 +0100 Subject: vnc: drop unused copyrect feature vnc stopped using the copyrect pseudo encoding in 2017, in commit 50628d3479e4 ("cirrus/vnc: zap bitblit support from console code.") So we can drop the now unused copyrect feature bit. Signed-off-by: Gerd Hoffmann Reviewed-by: Marc-André Lureau Reviewed-by: Daniel P. Berrangé Message-id: 20201208115737.18581-5-kraxel@redhat.com --- ui/vnc.c | 3 --- ui/vnc.h | 2 -- 2 files changed, 5 deletions(-) (limited to 'ui') diff --git a/ui/vnc.c b/ui/vnc.c index 49235056f7..8c2771c1ce 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -2061,9 +2061,6 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings) case VNC_ENCODING_RAW: vs->vnc_encoding = enc; break; - case VNC_ENCODING_COPYRECT: - vs->features |= VNC_FEATURE_COPYRECT_MASK; - break; case VNC_ENCODING_HEXTILE: vs->features |= VNC_FEATURE_HEXTILE_MASK; vs->vnc_encoding = enc; diff --git a/ui/vnc.h b/ui/vnc.h index 262fcf179b..a7fd38a820 100644 --- a/ui/vnc.h +++ b/ui/vnc.h @@ -445,7 +445,6 @@ enum VncFeatures { VNC_FEATURE_WMVI, VNC_FEATURE_TIGHT, VNC_FEATURE_ZLIB, - VNC_FEATURE_COPYRECT, VNC_FEATURE_RICH_CURSOR, VNC_FEATURE_TIGHT_PNG, VNC_FEATURE_ZRLE, @@ -459,7 +458,6 @@ enum VncFeatures { #define VNC_FEATURE_WMVI_MASK (1 << VNC_FEATURE_WMVI) #define VNC_FEATURE_TIGHT_MASK (1 << VNC_FEATURE_TIGHT) #define VNC_FEATURE_ZLIB_MASK (1 << VNC_FEATURE_ZLIB) -#define VNC_FEATURE_COPYRECT_MASK (1 << VNC_FEATURE_COPYRECT) #define VNC_FEATURE_RICH_CURSOR_MASK (1 << VNC_FEATURE_RICH_CURSOR) #define VNC_FEATURE_TIGHT_PNG_MASK (1 << VNC_FEATURE_TIGHT_PNG) #define VNC_FEATURE_ZRLE_MASK (1 << VNC_FEATURE_ZRLE) -- cgit v1.2.3-55-g7522 From a7d83e43597964047e1d2f326c249082e7d9b99f Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Tue, 8 Dec 2020 12:57:33 +0100 Subject: vnc: add pseudo encodings Add #defines for two new pseudo encodings: * cursor with alpha channel. * extended desktop resize. https://github.com/rfbproto/rfbproto/blob/master/rfbproto.rst#pseudo-encodings Signed-off-by: Gerd Hoffmann Reviewed-by: Marc-André Lureau Reviewed-by: Daniel P. Berrangé Message-id: 20201208115737.18581-6-kraxel@redhat.com --- ui/vnc.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'ui') diff --git a/ui/vnc.h b/ui/vnc.h index a7fd38a820..6f5006da35 100644 --- a/ui/vnc.h +++ b/ui/vnc.h @@ -411,6 +411,8 @@ enum { #define VNC_ENCODING_AUDIO 0XFFFFFEFD /* -259 */ #define VNC_ENCODING_TIGHT_PNG 0xFFFFFEFC /* -260 */ #define VNC_ENCODING_LED_STATE 0XFFFFFEFB /* -261 */ +#define VNC_ENCODING_DESKTOP_RESIZE_EXT 0XFFFFFECC /* -308 */ +#define VNC_ENCODING_ALPHA_CURSOR 0XFFFFFEC6 /* -314 */ #define VNC_ENCODING_WMVi 0x574D5669 /***************************************************************************** -- cgit v1.2.3-55-g7522 From 074a86d0b3e8a9352dcca32b46917e1b3ab23ea4 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Tue, 8 Dec 2020 12:57:34 +0100 Subject: vnc: add alpha cursor support There is a new vnc extension for cursors with an alpha channel. Use it if supported by the vnc client, prefer it over the "rich cursor" extension which supports only a bitmask for transparency. This is a visible improvement especially on modern desktops which actually use the alpha channel when defining cursors. https://github.com/rfbproto/rfbproto/blob/master/rfbproto.rst#cursor-with-alpha-pseudo-encoding Signed-off-by: Gerd Hoffmann Reviewed-by: Marc-André Lureau Reviewed-by: Daniel P. Berrangé Tested-by: Daniel P. Berrangé Message-id: 20201208115737.18581-7-kraxel@redhat.com --- ui/vnc.c | 21 ++++++++++++++++++--- ui/vnc.h | 2 ++ 2 files changed, 20 insertions(+), 3 deletions(-) (limited to 'ui') diff --git a/ui/vnc.c b/ui/vnc.c index 8c2771c1ce..247e80d8f5 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -937,6 +937,18 @@ static int vnc_cursor_define(VncState *vs) QEMUCursor *c = vs->vd->cursor; int isize; + if (vnc_has_feature(vs, VNC_FEATURE_ALPHA_CURSOR)) { + vnc_lock_output(vs); + vnc_write_u8(vs, VNC_MSG_SERVER_FRAMEBUFFER_UPDATE); + vnc_write_u8(vs, 0); /* padding */ + vnc_write_u16(vs, 1); /* # of rects */ + vnc_framebuffer_update(vs, c->hot_x, c->hot_y, c->width, c->height, + VNC_ENCODING_ALPHA_CURSOR); + vnc_write_s32(vs, VNC_ENCODING_RAW); + vnc_write(vs, c->data, c->width * c->height * 4); + vnc_unlock_output(vs); + return 0; + } if (vnc_has_feature(vs, VNC_FEATURE_RICH_CURSOR)) { vnc_lock_output(vs); vnc_write_u8(vs, VNC_MSG_SERVER_FRAMEBUFFER_UPDATE); @@ -2102,9 +2114,9 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings) break; case VNC_ENCODING_RICH_CURSOR: vs->features |= VNC_FEATURE_RICH_CURSOR_MASK; - if (vs->vd->cursor) { - vnc_cursor_define(vs); - } + break; + case VNC_ENCODING_ALPHA_CURSOR: + vs->features |= VNC_FEATURE_ALPHA_CURSOR_MASK; break; case VNC_ENCODING_EXT_KEY_EVENT: send_ext_key_event_ack(vs); @@ -2134,6 +2146,9 @@ static void set_encodings(VncState *vs, int32_t *encodings, 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); + } } static void set_pixel_conversion(VncState *vs) diff --git a/ui/vnc.h b/ui/vnc.h index 6f5006da35..c8d3ad9ec4 100644 --- a/ui/vnc.h +++ b/ui/vnc.h @@ -448,6 +448,7 @@ enum VncFeatures { VNC_FEATURE_TIGHT, VNC_FEATURE_ZLIB, VNC_FEATURE_RICH_CURSOR, + VNC_FEATURE_ALPHA_CURSOR, VNC_FEATURE_TIGHT_PNG, VNC_FEATURE_ZRLE, VNC_FEATURE_ZYWRLE, @@ -461,6 +462,7 @@ enum VncFeatures { #define VNC_FEATURE_TIGHT_MASK (1 << VNC_FEATURE_TIGHT) #define VNC_FEATURE_ZLIB_MASK (1 << VNC_FEATURE_ZLIB) #define VNC_FEATURE_RICH_CURSOR_MASK (1 << VNC_FEATURE_RICH_CURSOR) +#define VNC_FEATURE_ALPHA_CURSOR_MASK (1 << VNC_FEATURE_ALPHA_CURSOR) #define VNC_FEATURE_TIGHT_PNG_MASK (1 << VNC_FEATURE_TIGHT_PNG) #define VNC_FEATURE_ZRLE_MASK (1 << VNC_FEATURE_ZRLE) #define VNC_FEATURE_ZYWRLE_MASK (1 << VNC_FEATURE_ZYWRLE) -- cgit v1.2.3-55-g7522 From 947191b4312a547621566d77d7b922d9e13bb63d Mon Sep 17 00:00:00 2001 From: Peng Liang Date: Mon, 16 Nov 2020 22:13:38 +0800 Subject: ui/vnc: Add missing lock for send_color_map vnc_write() should be locked after the RFB protocol is initialized. Fixes: 0c426e4534b4 ("vnc: Add support for color map") Cc: qemu-stable@nongnu.org Reported-by: Euler Robot Signed-off-by: Peng Liang Message-id: 20201116141338.148911-1-liangpeng10@huawei.com Signed-off-by: Gerd Hoffmann --- ui/vnc.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'ui') diff --git a/ui/vnc.c b/ui/vnc.c index 247e80d8f5..34e6dc437c 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -2168,6 +2168,7 @@ static void send_color_map(VncState *vs) { int i; + vnc_lock_output(vs); vnc_write_u8(vs, VNC_MSG_SERVER_SET_COLOUR_MAP_ENTRIES); vnc_write_u8(vs, 0); /* padding */ vnc_write_u16(vs, 0); /* first color */ @@ -2180,6 +2181,7 @@ static void send_color_map(VncState *vs) vnc_write_u16(vs, (((i >> pf->gshift) & pf->gmax) << (16 - pf->gbits))); vnc_write_u16(vs, (((i >> pf->bshift) & pf->bmax) << (16 - pf->bbits))); } + vnc_unlock_output(vs); } static void set_pixel_format(VncState *vs, int bits_per_pixel, -- cgit v1.2.3-55-g7522 From 2951106143f6cf20b3a0e4f2078721503fe6418a Mon Sep 17 00:00:00 2001 From: Darrell Walisser Date: Thu, 10 Dec 2020 14:33:06 +0000 Subject: sdl2: Add extra mouse buttons Allows guest to receive mouse buttons 4 and 5, aka "SIDE" button and "EXTRA" button Signed-off-by: Darrell Walisser Message-id: GNUALCfDBqhCUvLwBNJaKqxcPewMtlqCnixk8xTrgI@ubuntu Signed-off-by: Gerd Hoffmann --- ui/sdl2.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'ui') diff --git a/ui/sdl2.c b/ui/sdl2.c index 189d26e2a9..a578017268 100644 --- a/ui/sdl2.c +++ b/ui/sdl2.c @@ -275,6 +275,8 @@ static void sdl_send_mouse_event(struct sdl2_console *scon, int dx, int dy, [INPUT_BUTTON_LEFT] = SDL_BUTTON(SDL_BUTTON_LEFT), [INPUT_BUTTON_MIDDLE] = SDL_BUTTON(SDL_BUTTON_MIDDLE), [INPUT_BUTTON_RIGHT] = SDL_BUTTON(SDL_BUTTON_RIGHT), + [INPUT_BUTTON_SIDE] = SDL_BUTTON(SDL_BUTTON_X1), + [INPUT_BUTTON_EXTRA] = SDL_BUTTON(SDL_BUTTON_X2) }; static uint32_t prev_state; -- cgit v1.2.3-55-g7522