gtk: disable GTK Clipboard with a new meson option
The GTK Clipboard implementation may cause guest hangs. Therefore implement new configure switch: --enable-gtk-clipboard, as a meson option disabled by default, which warns in the help text about the experimental nature of the feature. Regenerate the meson build options to include it. The initialization of the clipboard is gtk.c, as well as the compilation of gtk-clipboard.c are now conditional on this new option to be set. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1150 Signed-off-by: Claudio Fontana <cfontana@suse.de> Acked-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Jim Fehlig <jfehlig@suse.com> Message-Id: <20221121135538.14625-1-cfontana@suse.de> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
fb977a8174
commit
29e0bfffab
@ -1246,6 +1246,8 @@ endif
|
||||
gtk = not_found
|
||||
gtkx11 = not_found
|
||||
vte = not_found
|
||||
have_gtk_clipboard = get_option('gtk_clipboard').enabled()
|
||||
|
||||
if not get_option('gtk').auto() or have_system
|
||||
gtk = dependency('gtk+-3.0', version: '>=3.22.0',
|
||||
method: 'pkg-config',
|
||||
@ -1264,6 +1266,8 @@ if not get_option('gtk').auto() or have_system
|
||||
required: get_option('vte'),
|
||||
kwargs: static_kwargs)
|
||||
endif
|
||||
elif have_gtk_clipboard
|
||||
error('GTK clipboard requested, but GTK not found')
|
||||
endif
|
||||
endif
|
||||
|
||||
@ -1842,6 +1846,7 @@ if glusterfs.found()
|
||||
endif
|
||||
config_host_data.set('CONFIG_GTK', gtk.found())
|
||||
config_host_data.set('CONFIG_VTE', vte.found())
|
||||
config_host_data.set('CONFIG_GTK_CLIPBOARD', have_gtk_clipboard)
|
||||
config_host_data.set('CONFIG_LIBATTR', have_old_libattr)
|
||||
config_host_data.set('CONFIG_LIBCAP_NG', libcap_ng.found())
|
||||
config_host_data.set('CONFIG_EBPF', libbpf.found())
|
||||
|
@ -219,6 +219,13 @@ option('vnc_sasl', type : 'feature', value : 'auto',
|
||||
description: 'SASL authentication for VNC server')
|
||||
option('vte', type : 'feature', value : 'auto',
|
||||
description: 'vte support for the gtk UI')
|
||||
|
||||
# GTK Clipboard implementation is disabled by default, since it may cause hangs
|
||||
# of the guest VCPUs. See gitlab issue 1150:
|
||||
# https://gitlab.com/qemu-project/qemu/-/issues/1150
|
||||
|
||||
option('gtk_clipboard', type: 'feature', value : 'disabled',
|
||||
description: 'clipboard support for the gtk UI (EXPERIMENTAL, MAY HANG)')
|
||||
option('xkbcommon', type : 'feature', value : 'auto',
|
||||
description: 'xkbcommon support')
|
||||
option('zstd', type : 'feature', value : 'auto',
|
||||
|
@ -93,6 +93,7 @@ meson_options_help() {
|
||||
printf "%s\n" ' glusterfs Glusterfs block device driver'
|
||||
printf "%s\n" ' gnutls GNUTLS cryptography support'
|
||||
printf "%s\n" ' gtk GTK+ user interface'
|
||||
printf "%s\n" ' gtk-clipboard clipboard support for GTK (EXPERIMENTAL, MAY HANG)'
|
||||
printf "%s\n" ' guest-agent Build QEMU Guest Agent'
|
||||
printf "%s\n" ' guest-agent-msi Build MSI package for the QEMU Guest Agent'
|
||||
printf "%s\n" ' hax HAX acceleration support'
|
||||
@ -274,6 +275,8 @@ _meson_option_parse() {
|
||||
--disable-gprof) printf "%s" -Dgprof=false ;;
|
||||
--enable-gtk) printf "%s" -Dgtk=enabled ;;
|
||||
--disable-gtk) printf "%s" -Dgtk=disabled ;;
|
||||
--enable-gtk-clipboard) printf "%s" -Dgtk_clipboard=enabled ;;
|
||||
--disable-gtk-clipboard) printf "%s" -Dgtk_clipboard=disabled ;;
|
||||
--enable-guest-agent) printf "%s" -Dguest_agent=enabled ;;
|
||||
--disable-guest-agent) printf "%s" -Dguest_agent=disabled ;;
|
||||
--enable-guest-agent-msi) printf "%s" -Dguest_agent_msi=enabled ;;
|
||||
|
2
ui/gtk.c
2
ui/gtk.c
@ -2403,7 +2403,9 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
|
||||
opts->u.gtk.show_tabs) {
|
||||
gtk_menu_item_activate(GTK_MENU_ITEM(s->show_tabs_item));
|
||||
}
|
||||
#ifdef CONFIG_GTK_CLIPBOARD
|
||||
gd_clipboard_init(s);
|
||||
#endif /* CONFIG_GTK_CLIPBOARD */
|
||||
}
|
||||
|
||||
static void early_gtk_display_init(DisplayOptions *opts)
|
||||
|
@ -97,7 +97,10 @@ if gtk.found()
|
||||
softmmu_ss.add(when: 'CONFIG_WIN32', if_true: files('win32-kbd-hook.c'))
|
||||
|
||||
gtk_ss = ss.source_set()
|
||||
gtk_ss.add(gtk, vte, pixman, files('gtk.c', 'gtk-clipboard.c'))
|
||||
gtk_ss.add(gtk, vte, pixman, files('gtk.c'))
|
||||
if have_gtk_clipboard
|
||||
gtk_ss.add(files('gtk-clipboard.c'))
|
||||
endif
|
||||
gtk_ss.add(when: x11, if_true: files('x_keymap.c'))
|
||||
gtk_ss.add(when: opengl, if_true: files('gtk-gl-area.c'))
|
||||
gtk_ss.add(when: [x11, opengl], if_true: files('gtk-egl.c'))
|
||||
|
Loading…
Reference in New Issue
Block a user